【问题标题】:EXCEL: Count Range; but Exclude blanks AND a specific stringEXCEL:计数范围;但排除空格和特定字符串
【发布时间】:2021-07-07 18:08:37
【问题描述】:

Excel 版本:Microsoft 365 捆绑包(V 2106 内部版本:14131.20278)

我正在尝试创建一个将数字输出到单个单元格 (B11) 的 Excel 公式;公式必须:

  • 计算给定范围 [B2:B8] 上有数据的单元格数;
  • 因此,IT 必须计算 非空白单元格;但还必须不包含带有特定字符串的单元格(在这种情况下,字符串将为“N/A”);
  • 公式还必须计算给定范围内的换行符 [so Char(10)] 的数量。

我了解对某个范围内输入的换行符进行计数是不习惯的;但这正是我所需要的。

见附图:

RANGE = 在本例中,我要计算的(非空白和非“N/A”)单元格范围从 B2B8

带公式的单元格:B11

到目前为止,我只完成了以下公式。

=SUM(LEN(B2:B8)-LEN(B2:B8;CHAR(10);""))+(LEN(B2:B8)>0))

此公式输出 == "9"(即,9 个换行符:忽略空格,但包含字符串“N/A”)

这个公式允许我计算给定范围内存在的所有换行符(因此,它不计算空白/空单元格),但它显然 不排除特定字符串“N /A"。

预期输出 == "8"(即,8 个换行符:忽略空白单元格和带有字符串“N/A”的单元格)

我想这可以通过“IF”来完成,但我还没有弄清楚。

感谢您的宝贵时间!

PS:我尝试在此处制作表格,但无法在单个单元格中添加换行符;所以,我最终求助于一张图片来解释我的观点,对于给您带来的不便,我深表歉意!)

【问题讨论】:

  • 你有什么版本的Excel?
  • @JvdV 啊是的;它位于 Microsoft 365 捆绑包中的 Excel(V 2106 内部版本:14131.20278)

标签: excel excel-formula


【解决方案1】:

好的,既然您已经获得了 Microsoft 365 的访问权限,请尝试以下操作:

=SUM(FILTER(1+(LEN(B2:B8)-LEN(SUBSTITUTE(B2:B8,CHAR(10),""))),LEN(B2:B8)*(B2:B8<>"N/A"),0))

顺便说一句,很好地提出了问题,还有一个有趣的小问题可以解决。希望以上内容对您有所帮助。

【讨论】:

  • 这很好用;另外,谢谢你的观察,我尽量说清楚。有没有更好的方法来只求和(在这种情况下是“计数”)唯一值?以下公式为我提供了我想要的解决方案,但也许可以缩短? =SUM(FILTER(1+(LEN(UNIQUE(B2:B8))-LEN(SUBSTITUTE(UNIQUE(B2:B8),CHAR(10),""))),LEN(UNIQUE(B2:B8))*(UNIQUE(B2:B8)&lt;&gt;"N/A"),0))
  • @heartborne,不客气。如果它回答了您的问题,请考虑单击复选标记。关于您的后续问题:这可能会有点困难,因为您可能还对换行符而不是整个单元格之后的可能重复感兴趣?如果布局正确,这可能是一个很好的后续问题作为单独的帖子。
【解决方案2】:

只是为了另一种方法:
在@ScottCraner 指出它不考虑 N/A 后编辑

=LET(x,FILTER($B$2:$B$8,B2:B8<>"N/A"),
     y,TEXTJOIN(CHAR(10),TRUE,x),
     z,SUBSTITUTE(y,CHAR(10),""),
   LEN(y)-LEN(z)+1)

当然,如果你有很多数据,如果结果字符串 > 32,767 个字符,TEXTJOIN 将失败

【讨论】:

  • @ScottCraner 现在可以了。感谢您指出这一点。
  • 非常巧妙,虽然字符限制确实是个问题。我渴望因为你而学会了LET! :)
【解决方案3】:

应该能够使用简单的COUNTIF(或COUNTIFS,如果您想添加更多标准来计数)来做到这一点。

试试=COUNTIF($B$2:$B$8, "&lt;&gt;N/A")

EDIT1:正如cybernetic.nomad 所指出的,处理非数字数据的更好方法是COUNTA。另一种解决方案可能是仅使用以下内容过滤整个数据:

=COUNTA(FILTER($B$2:$B$8, $B$2:$B$8&lt;&gt;"N/A"))

EDIT2:正如 Scott Craner 所指出的,此解决方案不考虑换行符。您可以使用以下方法添加它们:

=COUNTA(FILTER($B$2:$B$8, $B$2:$B$8<>"N/A"))+
SUM(LEN($B$2:$B$8)-LEN(SUBSTITUTE($B$2:$B$8,CHAR(10),"")))

【讨论】:

  • 也值得关注COUNTA
  • 感谢您的回复,但您的 EDIT2 解决方案不会仍然算空白吗?也许有人可以解决它:=COUNTA(FILTER($B$2:$B$8,($B$2:$B$8&lt;&gt;"N/A")*($B$2:$B$8&lt;&gt;""),0))+SUM(LEN($B$2:$B$8)-LEN(SUBSTITUTE($B$2:$B$8,CHAR(10),"")))
  • @Heartborne 没问题,希望对您有所帮助。 COUNTA 只计算非空格
猜你喜欢
  • 1970-01-01
  • 2015-07-02
  • 2021-09-21
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多