2017-03-16 1 views
0

Excel에서 문자와 관련된 숫자의 합계를 계산하는 방법은 무엇입니까? 데이터는 아래에 언급되어 있습니다. 각 문자에 약간의 값이 지정되었습니다.문자로 숫자 계산하기위한 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,6,5,1,7

내가 Excel에서 단어를 입력하면, 그것은 반드시 반환 한 자리.

예를 들어 단어 "google"의 합계는 (3 + 7 + 7 + 3 + 3 + 5) = 28 = 10 = 1 최종 결과입니다.

어떻게 해결할 수 있습니까?

+2

이유는 1, 2, 5, 1과 9의 합이 될 것 (9)을 제거 할 필요가 대소 문자를 만들려면? 그리고 "무엇을 의미합니까?"- 내가 보낸 편지와 해당 값 사이에 어떤 관계도 보이지 않습니다. 그래서 어떤 값을 다른 문자와 연관시켜야하는지 어떻게 알 수 있습니까? – YowE3K

+0

이름이 지정된 값 (정적 값을 참조하는 것을 제외하고는 명명 된 범위와 동일)을 사용할 수 있다고 생각했지만 이름으로 'C'또는 'R'을 사용할 수 없으며 다른 문자로 사용할 수도 없습니다. 그런 다음'= SUM (A, B, D, H)'를 사용하여 13을 반환 할 수 있습니다. –

+0

각 문자에 값을 할당했습니다. A, B, C, D, E, F, G, H, I, J, K, L, 「N」, 「O」, 「P」, 「Q」, 「R」, 「S」, 「T」, 「U」, 「V」, 「W」, 「X」, ,"지"; 및 그 값 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 Excel에 단어를 입력하면 한 자리 숫자를 반환해야합니다. 예를 들어 "google"이라는 단어의 합계는 (3 + 7 + 7 + 3 + 3 + 5) = 28 = 10 = 1 최종 결과입니다. –

답변

1

는 모듈에 다음 코드를 추가합니다 :

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 

그리고 당신은 모든 셀에 =SumChars("ABC")를 사용할 수 있습니다. 는 당신이 UCase

If arrChar(j) = Mid(strInput, i, 1) Then 
+0

질문의 범위가 너무 넓습니다.하지만 답변이 마음에 드네요 ... 단 한 가지는 OP의 마지막 단계 인 28에서 1로 'google'예를 바꾸지 않는 것입니다. . 예 : 28 = 1이고 왜냐하면'2 + 8 = 10'과'1 + 0 = 1'이기 때문이다. OP는 수비학 계산기를 원합니다. –

+0

그 작업. 그러나 "wwwwwwwww"와 같은 단어를 입력하면 54를 반환하고 9를 반환해야합니다. –

+0

내 잘못으로 보지 못했습니다. 나는 나의 대답을 업데이트했다. @ RobinMackenzie하지만 당신이 맞습니다. 질문이 너무 광범위합니다. 나는 향상시킬 것을 약속한다. –

0

문자를 배열 및 해당 값에 해당하는 값을 배열에 넣은 다음 필요한 문자를 치고 연결된 숫자 배열에서 해당 값을 반환 할 때까지 배열을 반복합니다.

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 

당신은 하위이를 사용하거나 모듈에 배치하여 User Defined Function로 할 수있다.

이 예제는 글자의 값을 반환하지만 쉽게 수정할 수있어 전체 단어를 반환 할 수 있습니다.