用字母计算数字的Excel宏公式
如何在excel中计算与字母相关的数字之和? 数据如下所述。用字母计算数字的Excel宏公式,excel,vba,Excel,Vba,如何在excel中计算与字母相关的数字之和? 数据如下所述。 我给每个字母分配了一个值 A、 B,C,D,E,F,G,H,I,J,K,L,M,N,O,p,Q,R,S,T,U,V,W,X,Y,Z 以及它们各自的价值: 1,2,3,4,5,8,3,5,1,1,2,3,4,5,7,8,1,2,3,4,6,6,5,1,7 如果我在excel中输入任何单词,它必须返回一位数 例如,google这个词的总和是3+7+7+3+3+5=28=10=1最终结果 如何实现这一点?将字母放入数组,并将其对应的值放入数
我给每个字母分配了一个值 A、 B,C,D,E,F,G,H,I,J,K,L,M,N,O,p,Q,R,S,T,U,V,W,X,Y,Z 以及它们各自的价值: 1,2,3,4,5,8,3,5,1,1,2,3,4,5,7,8,1,2,3,4,6,6,5,1,7 如果我在excel中输入任何单词,它必须返回一位数 例如,google这个词的总和是3+7+7+3+3+5=28=10=1最终结果
如何实现这一点?将字母放入数组,并将其对应的值放入数组,然后在数组中循环,直到找到所需的字母并从链接数字数组返回其值
Function LetterValues(letter As Variant)
Dim letters() As Variant, numbers() As Variant
letters = Array("A", "B", "C")
numbers = Array(1, 2, 3)
For x = 0 To UBound(letters)
If letters(x) = letter Then
LetterValues = numbers(x)
Exit Function
End If
Next x
End Function
Sub TestFunction()
Dim result As Variant
result = LetterValues("A")
End Sub
您可以在子模块中使用它,也可以通过将其放置在模块中来将其用作子模块
本例返回一个字母的值,但您可以轻松修改它以返回一个完整的单词。将以下代码添加到模块中:
Sub test()
Debug.Print SumChars("ABCd")
End Sub
Public Function SumChars(strInput As String) As Double
Dim arrChar(), arrVals()
arrChar = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
arrVals = Array(1, 2, 3, 4, 5, 8, 3, 5, 1, 1, 2, 3, 4, 5, 7, 8, 1, 2, 3, 4, 6, 6, 6, 5, 1, 7)
Dim dblSum As Double
dblSum = 0
Dim i As Integer, j As Integer
For i = 1 To Len(strInput)
For j = LBound(arrChar) To UBound(arrChar)
If UCase(arrChar(j)) = UCase(Mid(strInput, i, 1)) Then
dblSum = dblSum + arrVals(j)
End If
Next j
Next i
Do While Len(CStr(dblSum)) > 1
dblSum = DigitSum(dblSum)
Loop
SumChars = dblSum
End Function
Private Function DigitSum(dblValue As Double) As Double
Dim i As Integer, dblSum As Double
For i = 1 To Len(CStr(dblValue))
dblSum = dblSum + Mid(CStr(dblValue), i, 1)
Next i
DigitSum = dblSum
End Function
您可以在任何单元格中使用=SumCharsABC。
要使其区分大小写,您需要删除UCase
为什么1,2,5,1和9的总和是9?你的意思是什么,等等-我看不出你提供的字母和它们对应的值之间有任何关系,那么我们如何知道哪些值应该与其他字母相关联?我想你可以使用与命名范围相同的命名值,除了它们引用一个静态值,但不能使用C或R作为名称,也不能使用其他字母来表示。然后可以使用=SUMA,B,D,H来返回13。我为每个字母分配了一个值。A、 B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z;以及它们的值分别为1,2,3,4,5,8,3,5,1,1,2,3,4,5,7,8,1,2,3,4,6,6,5,1,7。如果我在excel中输入任何单词,它必须返回一位数。例如,google这个词的总和是3+7+7+3+3+5=28=10=1最终结果。这个问题太宽泛了,但我喜欢你的答案。。。唯一的问题是你没有做OP的最后一步,将28转化为1——谷歌的例子。28=1,因为2+8=10和1+0=1。OP需要数字计算器,它可以用了。但是如果我输入像WWWW这样的单词,它会返回54,而且它必须返回9。我的坏朋友没有看到。我更新了我的答案@RobinMackenzie但是你是对的,显然这个问题太广泛了。我保证会进步。我可以通过手机号码代替文字吗?不用担心@Peh。回答得不错+1
If arrChar(j) = Mid(strInput, i, 1) Then