在單元格中是一個數,使用公式求組成這個數的單個數字相加的和,如下圖1所示。
圖1
先不看答案,自已動手試一試。
公式
在單元格C3中,輸入數組公式:
=SUM(1*(MID(B3,ROW(INDIRECT(“1:”& LEN(B3))),1)))
下拉至單元格C10。
公式解析
公式中:
ROW(INDIRECT(“1:” & LEN(B3)))
用來生成連續的整數,其最大值為單元格B3中數值的長度,即:
{1;2;3;4;5;6;7;8;9}
將此數組傳遞給MID函數:
MID(B3,ROW(INDIRECT(“1:” &LEN(B3))),1)
即:
MID(B3, {1;2;3;4;5;6;7;8;9},1)
得到數組:
{“1″;”2″;”3″;”4″;”5″;”6″;”7″;”8″;”9”}
實現了將數值進行拆分。
將上面的數組與1相乘轉換為數字:
1*(MID(B3,ROW(INDIRECT(“1:” &LEN(B3))),1))
即:
1*{“1″;”2″;”3″;”4″;”5″;”6″;”7″;”8″;”9”}
得到數組:
{1;2;3;4;5;6;7;8;9}
傳遞給SUM函數求和:
=SUM({1;2;3;4;5;6;7;8;9})
得到結果:
45
另一個公式
還可以使用SUMPRODUCT函數來解決。這是一個非數組公式:
=SUMPRODUCT(MID(B3,ROW(OFFSET($A$1,,,LEN(B3))),1)+0)
公式中:
OFFSET($A$1,,,LEN(B3))
以單元格A1為起點,擴展至單元格B3長度數量的單元格,本例中為A9,即單元格區域A1:A9,傳遞給ROW函數:
ROW(OFFSET($A$1,,,LEN(B3)))
解析為:
{1;2;3;4;5;6;7;8;9}
將上面的數組傳遞給MID函數:
MID(B3,ROW(OFFSET($A$1,,,LEN(B3))),1)
即:
MID(B3, {1;2;3;4;5;6;7;8;9},1)
得到:
{“1″;”2″;”3″;”4″;”5″;”6″;”7″;”8″;”9”}
實現了數拆分成單個數字。
然后與0相加,得到數值組成的數組:
MID(B3,ROW(OFFSET($A$1,,,LEN(B3))),1)+0
即:
{“1″;”2″;”3″;”4″;”5″;”6″;”7″;”8″;”9”}+0
得到:
{1;2;3;4;5;6;7;8;9}
將其傳遞給SUMPRODUCT函數:
=SUMPRODUCT({1;2;3;4;5;6;7;8;9})
對于單個數組,SUMPRODUCT函數直接對其中的元素求和,得到結果:
45