我有一个单元格,其中混合了数字和字母(例如AA12CC45WR
),并且它们是随机的。
在另一张表上,我有一张表格,其中每个字母都有等价内容,如(单元格A1
,B1
)
A=1
C=25
W=66
R=77
ABC 字母直到 Z
解决方案应该是11122525456677
如何生成一个函数来用另一张表中定义的数字替换所有字母?
答案1
这是一个进行解码的函数。将其放在模块中并根据需要更新 Range 引用。如果单元格A1
有原始“代码”值,请在另一个单元格中输入公式:=Decode(A1)
以获取“解码”值。
Public Function Decode(Code As String) As String
Dim iIdx As Integer
Dim sChar As String
Dim sResult As String
For iIdx = 1 To Len(Code)
sChar = UCase$(Mid$(Code, iIdx, 1))
If Asc(sChar) >= 65 And Asc(sChar) <= 90 Then
sChar = WorksheetFunction.VLookup(sChar, Worksheets("Sheet2").Range("A1:B26"), 2, False)
End If
sResult = sResult & sChar
Next iIdx
Decode = sResult
End Function
答案2
如果今天(2020 年)感兴趣:
如果需要的话,可以使用以下公式:
=TEXTJOIN("",FALSE,VLOOKUP(MID(A1,SEQUENCE(LEN(A1)),1),$F$1:$G$36,2,FALSE))
它假设输入值在 A1 中,并使用一个有两列的查找表,左列包含从 0-9 到 AZ 的文本字符(36 行),最右边的列单元格中首先是公式 =F_。这些将被替换为字母的值(尽管 0-9 条目可能不会),就像人们定义的那样(立即替换所有字母,或者随着时间的推移,现在替换几个字母,然后替换几个字母,因此任何未分配数值的字母都会替换自身。该表是 F1:G36。
根据需要修改源和查找表地址。
如果需要,还可以使用TEXTJOIN()
分隔符(可能是连字符)来分隔每个原始字符的值。其他将它们连接/重新连接在一起的方法会比较困难。
在 2011 年,人们会使用CONCATENATE() or union-ing with
ROW() in place of
SEQUENCE() though not
LEN(A1)`,所以这也会变得更加困难。