Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用字母计算数字的Excel宏公式_Excel_Vba - Fatal编程技术网

用字母计算数字的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最终结果 如何实现这一点?将字母放入数组,并将其对应的值放入数

如何在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最终结果


如何实现这一点?

将字母放入数组,并将其对应的值放入数组,然后在数组中循环,直到找到所需的字母并从链接数字数组返回其值

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