如何在Excel中统计G列数组列表中各数值的出现次数?
Excel统计G列数组中数字出现次数的解决思路
方法1:拆分数组为单个值后统计
- 先处理格式:选中G列,用查找替换把
{和}替换为空,让单元格内容变成10,11,12这种纯逗号分隔的格式 - 拆分数字:选中处理后的G列,点击「数据」选项卡→「分列」,选择「分隔符号」→勾选「逗号」,完成后每个数字会被拆到相邻列
- 统计次数:比如要统计10的出现次数,直接用公式
=COUNTIF(所有拆分出的数字区域,10),其他数字同理
方法2:用TEXTJOIN+SUMPRODUCT(Excel 2019及以上可用)
- 合并所有数字为文本串:在空白单元格输入公式
这个公式会把G列所有数组的数字用逗号连起来,变成=TEXTJOIN(",",TRUE,SUBSTITUTE(SUBSTITUTE(G:G,"{",""),"}",""))10,11,12,10,11,12,11,12,14这样的字符串 - 统计目标数字次数:比如统计10的次数,用下面的公式(把A1换成上面合并文本的单元格)
=SUMPRODUCT(--(FILTERXML("<a><b>"&SUBSTITUTE(A1,",","</b><b>")&"</b></a>","//b")=10))
方法3:动态数组公式(Excel 365/2021专属)
- 直接生成所有数字的次数统计,输入以下公式后回车,会自动生成结果:
=LET( 处理后文本,SUBSTITUTE(SUBSTITUTE(G:G,"{",""),"}",""), 所有数字,TEXTSPLIT(TEXTJOIN(",",TRUE,处理后文本),","), 唯一数字,SORT(UNIQUE(所有数字)), 出现次数,COUNTIF(所有数字,唯一数字), HSTACK(唯一数字,出现次数) ) - 如果需要统计指定范围的数字(比如10到14,包括没出现的13),把公式里的
唯一数字改成SEQUENCE(5,1,10),出现次数改成COUNTIF(所有数字,SEQUENCE(5,1,10)),就能得到10-14每个数字的次数,包括0次的13
方法4:VBA脚本批量处理(适合旧版本Excel或大量数据)
- 按
Alt+F11打开VBA编辑器,右键当前工作表→插入→模块,粘贴以下代码:Sub 统计数组数字次数() Dim ws As Worksheet Dim lastRow As Long, i As Long Dim arr As Variant, num As Variant Dim countDict As Object Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "G").End(xlUp).Row Set countDict = CreateObject("Scripting.Dictionary") ' 遍历G列所有行,拆分数组并统计次数 For i = 1 To lastRow arr = Split(Replace(Replace(ws.Cells(i, "G").Value, "{", ""), "}", ""), ",") For Each num In arr num = Trim(num) If IsNumeric(num) Then countDict(num) = countDict(num) + 1 End If Next num Next i ' 输出结果到I、J列 ws.Range("I1:J1") = Array("数字", "出现次数") i = 2 For Each num In countDict.Keys ws.Cells(i, "I").Value = num ws.Cells(i, "J").Value = countDict(num) i = i + 1 Next num End Sub - 点击运行按钮,结果会自动输出到I、J列;如果需要补充未出现的数字,手动添加行即可
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

