Excel单单元格内多段二进制串的0、1分别计数方法求助
嘿,这个场景我之前帮同事解决过,给你两个实用方案,从不用写代码的公式法到一劳永逸的VBA自定义函数,看你需求选就行:
方案1:Excel原生公式组合(适合无代码基础的用户)
如果你的Excel是365/2021版本,TEXTSPLIT函数能帮你快速拆分单元格里的二进制串,再结合LEN和SUBSTITUTE统计0/1数量,一步到位。
假设目标数据在单元格A1,直接在空白单元格(比如B1)输入这个动态数组公式:
=LET( splits, TEXTSPLIT(A1,"<br>"), seq, SEQUENCE(ROWS(splits)), "zeros"&seq&": "&LEN(splits)-LEN(SUBSTITUTE(splits,"1",""))&" ones"&seq&": "&LEN(SUBSTITUTE(splits,"0","")) )
按下回车后,公式会自动溢出所有统计结果,完全不用手动下拉。
要是你用的是旧版Excel(没有TEXTSPLIT),可以用MID+SUBSTITUTE先提取每一段:
比如提取第k段的公式:
=TRIM(MID(SUBSTITUTE(A1,"<br>",REPT(" ",LEN(A1))), (k-1)*LEN(A1)+1, LEN(A1)))
再分别统计0和1的数量:
- 统计第k段的0数量:
=LEN(提取公式)-LEN(SUBSTITUTE(提取公式,"1","")) - 统计第k段的1数量:
=LEN(SUBSTITUTE(提取公式,"0",""))
方案2:VBA自定义函数(适合频繁使用的场景)
如果需要反复处理这类数据,写个自定义函数会更高效。按Alt+F11打开VBA编辑器,插入一个新模块,粘贴下面的代码:
Function CountBinarySegments(cell As Range) As Variant Dim segments() As String Dim result() As String Dim i As Integer Dim zeros As Integer, ones As Integer ' 按<br>拆分单元格内容 segments = Split(cell.Value, "<br>") ReDim result(UBound(segments)) ' 遍历每一段二进制串,统计0和1的数量 For i = LBound(segments) To UBound(segments) zeros = Len(segments(i)) - Len(Replace(segments(i), "1", "")) ones = Len(Replace(segments(i), "0", "")) result(i) = "zeros" & (i + 1) & ": " & zeros & " ones" & (i + 1) & ": " & ones Next i ' 转置结果,让它在Excel里纵向溢出 CountBinarySegments = Application.Transpose(result) End Function
回到Excel后,在任意单元格输入=CountBinarySegments(A1),回车就能得到所有统计结果,自动向下填充。
测试你的示例数据
用你提供的示例内容:
10000010011
10101010101
01100111000
101101010110
不管用哪个方案,都会生成你要的结果:
- zeros1:7 ones1:4
- zeros2:5 ones2:6
- zeros3:6 ones3:5
- zeros4:5 ones4:7
内容的提问来源于stack exchange,提问作者Ads5
相关产品推荐
相关产品推荐

