excel - 逆向工程Excel公式

标签 excel vba excel-formula

我有一个 Excel VBA 公式,我正在尝试反转该公式,Sub letterToHex 效果很好。但我无法弄清楚如何进行反向工作的最后阶段,以将十六进制代码转换回 CPJ。我已经成功地让前几个阶段在 Sub HextoLetter 中工作

Sub LetterToHex()

R1 = "CPJ"

N1 = Asc(Right(R1, 1)) - 64 ' Result is ASCII value of letter J is  (74) - 64  = 10

N1 = N1 + (Asc(Mid(R1, 2, 1)) - 64) * 64 ' Result is ASCII value of letter P is (80) - 64 * 64 = 1234 + N1 value 10 = 1034

n11 = (Asc(Left(R1, 1)) - 64) * 64 ' Result is ASCII value of letter C (67) - 64 =3 * 64 = 192

N1 = N1 + n11 * 64 ' result is 13322

N1 = N1 + 14680064 ' Result is 14693386

N2 = Hex(N1) 'Result is N2 = E0340A
dec = CLng("&H" & N2)

notfound:

End Sub

Sub HextoLetter()
hexcode = "E0340A"
dec = CLng("&H" & hexcode) '14693386
shortdec = dec - 14680064 '13322

End Sub

我需要完成 HextoLetter 代码才能将十六进制代码 E0340A 转换回 CPJ

显示的附加代码

Sub LetterToHex_CPK()

R1 = "CPK"

N1 = Asc(Right(R1, 1)) - 64 ' Result is ASCII value of letter K is  (75) - 64  = 11
MsgBox N1
N1 = N1 + (Asc(Mid(R1, 2, 1)) - 64) * 64 ' Result is ASCII value of letter P is (80) - 64 * 64 = 1234 + N1 value 11 = 1035
MsgBox N1
n11 = (Asc(Left(R1, 1)) - 64) * 64 ' Result is ASCII value of letter C (67) - 64 =3 * 64 = 192
MsgBox n11
N1 = N1 + n11 * 64 ' result is 13323
MsgBox N1
N1 = N1 + 14680064 ' Result is 14693387
MsgBox N1
N2 = Hex(N1) 'Result is N2 = E0340B
MsgBox N2
dec = CLng("&H" & N2)

notfound:

End Sub

最佳答案

您在第一个过程中得到了一笔金额

N1 = N1 + n11 * 64

因此公式无法恢复!

说明:

假设您的总和为 5 + 4 = 10。如果您只知道总和 10 并且想知道 a + b = 10 那么您就无法还原它,那么对于 a 就有不止一种解决方案code> 和 b (实际上有无限的解决方案)。

因此答案是:您的十六进制代码无法还原为 3 个字母。

关于excel - 逆向工程Excel公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54256893/

相关文章:

arrays - 如何用在module1 VBA中填充的数组填充列表框

excel - 将长日期文本转换为日期/时间

vba - Excel VBA 公式德语/法语/意大利语/俄语/荷兰语/外国函数

excel - 链接到基于另一个单元格的外部工作簿

vba - Excel没有响应VBA

Excel中的排序公式

sql - 将 Excel 业务逻辑转换为 T-SQL

excel - VBA 错误处理 - 给定情况的最佳实践是什么?

excel - 在 Google 表格或 Excel 中计算当前月份和年份的行数

vba - 如何清除合并单元格的内容