在单个单元格中使用多个条件和多个实例进行 Excel 计数

Excel counting with multiple criteria and multiple instances in a single cell

提问人:isd503 提问时间:10/27/2023 最后编辑:Mayukh Bhattacharyaisd503 更新时间:10/31/2023 访问量:139

问:

enter image description here

我需要一个函数的帮助,该函数将在 A 列(例如 A1)中找到 1 的所有值。对于每个值 1,我需要函数来计算以 178 开头的 IP 地址数。或 14.在相应的 B 列中(例如 B1)。IP地址用逗号和空格分隔,例如178.5.4.3,178.5.4.4

我能够数出 178 个实例的总数。在B列中使用以下公式:

=SUM(LEN(A2:A11)-LEN(SUBSTITUTE(A2:A11,"178.",""))/LEN("178."))

或者通过在替代函数中添加四个空格来做到这一点:

=SUM(LEN(A2:A11)-LEN(SUBSTITUTE(A2:A11,"178."," ")))

但是,我似乎找不到一种方法来搜索 A 列中的 1(不计算它),然后计算 178 的数字。和 14.在相应的 B 列中。

目的是找出区域 1、2、3 等中正在使用的 IP 地址数量。


1   14.38.227.88
1   14.38.227.103
1   14.38.227.104
2   178.32.38.106, 178.32.34.241, 178.32.33.65, 178.32.32.20, 178.32.34.135
2   178.32.38.187, 178.32.38.52, 178.32.38.50, 178.32.38.4, 178.32.36.223, 178.32.35.197, 178.32.34.254, 178.32.32.160, 178.32.32.159, 178.32.32.76, 178.32.32.39, 178.32.32.38, 178.32.32.26
3   178.32.33.61, 178.32.33.57
3   178.32.38.180, 178.32.38.119, 178.32.38.64, 178.32.38.62, 178.32.37.215, 178.32.35.108, 178.32.35.42, 178.32.34.242, 178.32.34.237, 178.32.34.1, 178.32.33.60, 178.32.33.59, 178.32.32.78, 178.32.33.56
4   178.32.39.6, 178.32.38.186, 178.32.38.115, 178.32.38.58, 178.32.37.216, 178.32.34.236, 178.32.33.206, 178.32.33.66, 178.32.33.55, 178.32.33.54, 178.32.32.77, 178.32.32.40, 178.32.32.33, 178.32.38.166
4   178.32.33.53, 178.32.38.167
4   178.32.33.68
Excel excel 公式 计数 单元格 多实例

评论

0赞 Solar Mike 10/28/2023
countifs() 呢?
0赞 isd503 10/28/2023
你有什么例子吗?经历了 countfs 的几次迭代,没有找到任何适用于此方案的内容。
0赞 Solar Mike 10/28/2023
好吧,提供我们可以复制和处理的数据。还可以使用 textsplit() 将 IP 地址分隔为同一行上的单独单元格。那么 find() 可能比 substitute() 工作得更好......此处和 Excel 帮助中有许多使用 countifs() 的示例。
0赞 isd503 10/28/2023
我用要求的数据编辑了这个问题。
0赞 DjC 10/28/2023
它们都以 178 开头。或 14.那么这个标准是否相关呢?您是否只想计算每个区域的 IP 地址,而不管前三位数字是多少?预期结果是区域 1、3;2区,18;3区,16区;4区、17区?

答:

0赞 Mayukh Bhattacharya 10/28/2023 #1

假设根据发布的标签没有 Excel 约束,那么以下公式应该可以完成所需的输出。

enter image description here


• 细胞中使用的配方A12

=LET(
     α, A1:A10,
     φ, B1:B10,
     UNIQUE(HSTACK(α,MMULT(N(α=TOROW(α)),LEN(φ)-LEN(SUBSTITUTE(φ,",",))+1))))

编辑:

根据 OP 的评论

谢谢。这是一个好的开始,看起来它会起作用。 只需要一次更改。IP 地址中的第一个八位字节很重要。 可能还列出了其他 IP 地址,但我只想计算以 178 开头的 IP 地址。 或 14。你能调整这个功能来做到这一点吗?


enter image description here


• 细胞中使用的配方A12

=LET(
     α, TEXTBEFORE(TEXTAFTER(", "&B1:B10,", ",SEQUENCE(,99)),"."),
     φ, TOCOL(IFS(ISNUMBER(XMATCH(α,{"178","14"})),A1:A10),3),
     UNIQUE(HSTACK(φ,MMULT(N(φ=TOROW(φ)),φ^0))))

  • α --> 首先将地址数据拆分为列,IP
  • φ --> 为那些地址以 & 开头的地址返回一个堆叠成一列的数组,并排除其余不以 & 开头的数组。ZonesIP178.14.
  • 最后,使用两个数组进行矩阵乘积以获取计数,并通过在使用后包装以组合两个数组,排除重复项。MMULT( )UNIQUE()HSTACK( )

此外,上面的公式假设每行将有最大 IP 地址,如果不是,则将其替换为 this 以使其成为动态-- ,,即该公式将是,9999MAX(LEN(B1:B10)-LEN(SUBSTITUTE(B1:B10,",",))+1)

=LET(
     Ψ, MAX(LEN(B1:B10)-LEN(SUBSTITUTE(B1:B10,",",))+1),
     α, TEXTBEFORE(TEXTAFTER(", "&B1:B10,", ",SEQUENCE(,Ψ)),"."),
     φ, TOCOL(IFS(ISNUMBER(XMATCH(α,{"178","14"})),A1:A10),3),
     UNIQUE(HSTACK(φ,MMULT(N(φ=TOROW(φ)),φ^0))))

enter image description here


更新的公式:

enter image description here


该公式根据 OP 的评论进行更新:

enter image description here


OP 说道:

谢谢。我看到它在同一电子表格中处理数据。如果我尝试引用另一个电子表格中的单元格,它似乎不起作用。其中“All_Devices_Requiring_IP_Space”是同一工作簿中的另一个传播,IP 地址位于 E 列中,区域编号位于 D 列中。

我看到它在您的链接中起作用。但是,每次我将公式剪切并粘贴到新单元格中时,我都会在电子表格中收到 #CALC! 错误。

我发现了问题。该函数不占用区域列中的空格。数据必须存在于两列的每一行中。这行不通: ' 1 178.32.33.68 5 14.38.227.88 5 14.38.227.103 14.38.227.104 178.32.33.68 14.38.227.88 5 14.38.227.103 6 14.38.227.104


• 细胞中使用的配方C1

=LET(
     δ, FILTER(All_Devices_Requiring_IP_Space!D1:E27,All_Devices_Requiring_IP_Space!D1:D27<>""),
     Ψ, MAX(LEN(INDEX(δ,,2))-LEN(SUBSTITUTE(INDEX(δ,,2),",",))+1),
     α, TEXTBEFORE(TEXTAFTER(", "&INDEX(δ,,2),", ",SEQUENCE(,Ψ)),"."),
     Φ, TOCOL(IFS(ISNUMBER(XMATCH(α,{"178","14"})),INDEX(δ,,1)),3),
     UNIQUE(HSTACK(Φ,MMULT(N(Φ=TOROW(Φ)),Φ^0))))

评论

0赞 isd503 10/29/2023
谢谢。这是一个好的开始,看起来它会起作用。只需要一次更改。IP 地址中的第一个八位字节很重要。可能还列出了其他 IP 地址,但我只想计算以 178 开头的 IP 地址。或 14.你能调整这个功能来做到这一点吗?
0赞 isd503 10/30/2023
谢谢。我看到它在同一电子表格中处理数据。如果我尝试引用另一个电子表格中的单元格,它似乎不起作用。其中“All_Devices_Requiring_IP_Space”是同一工作簿中的另一个传播,IP 地址位于 E 列中,区域编号位于 D 列中。
0赞 isd503 10/31/2023
我看到它在您的链接中起作用。但是,每次我将公式剪切并粘贴到新单元格中时,我都会得到 #CALC!我的电子表格中的错误。
0赞 isd503 10/31/2023
我发现了问题。该函数不占用区域列中的空格。数据必须存在于两列的每一行中。这行不通: ' 1 178.32.33.68 5 14.38.227.88 5 14.38.227.103 14.38.227.104 178.32.33.68 14.38.227.88 5 14.38.227.103 6 14.38.227.104 '
1赞 isd503 10/31/2023
明白了!非常感谢您的支持。太棒了!
0赞 VBasic2008 10/28/2023 #2

计数子字符串

=LET(data,A2:B21,ucol,1,vcol,2,crit,{"A.";"B."},dlm,", ",
    ud,CHOOSECOLS(data,ucol),
    vd,CHOOSECOLS(data,vcol),
    u,UNIQUE(ud),
    v,BYROW(u,LAMBDA(r,LET(
        f,FILTER(vd,ud=r),
        sc,TEXTSPLIT(TEXTJOIN(dlm,,f),dlm),
        vc,COUNT(SEARCH(TOCOL(crit&"*"),sc)),
    vc))),
HSTACK(u,v))

enter image description here

=LET(data,A2:B21,ucol,1,vcol,2,crit,{"A.";"B."},dlm,", ",
    ud,CHOOSECOLS(data,ucol),
    vd,CHOOSECOLS(data,vcol),
    u,UNIQUE(ud),
HSTACK(u,BYROW(u,LAMBDA(r,
    COUNT(SEARCH(TOCOL(crit&"*"),
        TEXTSPLIT(TEXTJOIN(dlm,,
            FILTER(vd,ud=r)),dlm)))))))