我在应用程序测试中使用了一系列字母数字数据,出于某些原因,我需要在每个字符串中计算从“a”到“f”的字母出现的总和(这将是用于进一步的数据处理):
02599caa0b600 --> should be 4
489455f183c1fb49b --> should be 5
678661081c1h
66410hd2f0kxd94f5bb
8a0339a4417
f6d9f967ts4af6e
886sf7asc3e85ec
03f1fhh3c3a2am
e491b17638m60
1m8h2m07bhaa4tnhbc4
29ma900a80m96m65
ca6a75f505tsac8
956828db8ts7fd1d
cf1d220a59a7851180e
a8b7852xd9e7a9
b85963fbe30718db9976
39b8kx8f85abb1b6
0xxb3b648ab
a8da75f730d45048
588h69d344
这是字符串的样子,它们的长度大约是10-30个符号,而且我想每天大约有 3-5k 进行处理。假设和限制:
到目前为止我尝试过的事情(我注意到,这里的做法非常受欢迎):
SUBSTITUTE
函数,但它很脏而且非常简单。假设范围可能会变为c-x,这将是一场噩梦。无论如何,我不要求“准备就绪”的“开箱即用”解决方案 - 我寻求帮助和正确的方向/方法进行自学并进一步了解类似的问题。
答案 0 :(得分:6)
您可以在不嵌套多个SUBSTITUTE函数的情况下使用SUBSTITUTE,例如在A1中的文本字符串中,B1中的这个公式将计算所有字母a到f(大写或小写)
=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(LOWER(A1),{"a","b","c","d","e","f"},"")))
对于较长的字母列表,例如c到x,您可以使用此版本以避免列出所有
=SUMPRODUCT(LEN(A1)-LEN(SUBSTITUTE(LOWER(A1),CHAR(96+ROW(INDIRECT("3:24"))),"")))
3:24表示字母3(c)至字母24(x),因此您可以轻松地将其更改为1:26(对于所有字母)或15:25(对于o至y等)。
答案 1 :(得分:4)
这是我的选择 - 非常类似于已发布的,但无论如何......特别是如果你对学习感兴趣,这在今天是如此罕见)
假设您的列表开始为A2,请使用以下数组公式:
=SUM(LEN($A2)-LEN(SUBSTITUTE($A2,CHAR(ROW(INDIRECT(CODE("a")&":"&CODE("f")))),"")))
正如提醒一样 - 按 CTRL + SHIFT + ENTER 而不是通常的 ENTER 。
一些解释:
CHAR(ROW(INDIRECT(...)))
结构转换回字符数组。还有两个类似的“坚果”样本 - 仅供学习之用。
如果您需要汇总所有数字匹配 - 您仍然可以使用上面的0和9作为输入(数字是从48到57代码从0开始的字符)。但是,以下更简单的解决方案也将采用:
=SUM(LEN($A2)-LEN(SUBSTITUTE($A2,ROW($1:$10)-1,"")))
这里的诀窍是我们可能会使用数组或行号生成数字0-9 1-10 减去 1 - ROW(0)
会产生错误。
最后,如果你需要在字符串中计算所有数字的总和 - 请使用:
=SUM(IFERROR(VALUE(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)),0))
在这里,我们使用MID
将每个字符串的初始字符串分解为字母,然后使用IFERROR
将其作为数字进行测试,并为除数字之外的任何内容返回0。
最后2个(显然)是你心爱的阵列坚果)))
我在Excel培训中使用上述样本进行质量保证(顺便欢迎SE,同事!),从而展示了坚果开裂的典型功能/方法。希望对你也有用。然而,所有以前的答案至少应该得到你的公平投票,尤其是@巴里的无坚果食谱)
为方便起见,我们共享了样本文件:https://www.dropbox.com/s/qo5k479oyawkrzh/SumLettersCount.xlsx
祝你的测试好运)
答案 2 :(得分:3)
此公式假设您的数据位于A列中,您要查找的范围的第一个字母是F1,而G1中的最后一个字母。它需要作为数组公式输入,然后向下复制到数据的底部。
=SUM(--(UPPER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>=UPPER($F$1))*--(UPPER(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<=UPPER($G$1))).
请注意,如果您要更改的字母范围发生变化,则需要更改单元格F1中的第一个字母和G1中的最后一个字母。
如果您确定任何字符串中的字符数不会超过某个最大数字,例如50,那么公式可以简化为:
=SUM(--(UPPER(MID(A1,ROW($1:$50),1))>=$F$1)*--(UPPER(MID(A1,ROW($1:$50),1))<=$G$1))
答案 3 :(得分:0)
假设您的数据位于A列,请尝试以下公式:
=SUM(--NOT(ISERROR(SEARCH(MID(A1,ROW($1:$99),1),"abcdef"))))-99+LEN(A1)
输入公式作为数组公式,即按 Ctrl - Shift - 输入。