COUNTIF(range, A or B) 该怎么写?

2019-03-04 17:16:40 +08:00
 MrUser
要求:统计包含 A 或 B 的行数:
1. A
2. AB
3. B
--------
正确结果应该是 3,以下两种方法都会导致第 2 行的“ AB ”被重复计算(错误结果“ 4 ”):
=SUM(COUNTIF(range, {"A", "B"}))
=COUNTIF(range, "A") + COUNTIF(range, "B")
2568 次点击
所在节点    程序员
12 条回复
elfive
2019-03-04 18:21:11 +08:00
COUNTIF A + COUNTIF B- COUNTIF AB
MrUser
2019-03-04 18:38:45 +08:00
有通用些的写法吗?如果有记录有 BA、ABC、A,C、AABB 等不确定的数据时候该怎么办?
@elfive
PANWCS
2019-03-04 18:40:02 +08:00
@MrUser 这已经是另一个问题了,XD
MrUser
2019-03-04 18:44:00 +08:00
结合一下我的大标题哈,问题的重点在“或”上,我已经从 Google 回来几次了,一直找不到解决方法
看来只能读到程序里,处理完再重新生成 xls 了……
@PANWCS
no1xsyzy
2019-03-04 20:09:39 +08:00
=COUNTIF(A1:A3, ".*[AB].*")

LibreOffice Calc:工具 - 选项 - LibreOffice Calc - 计算 -- 允许公式中含有正则表达式。
krixaar
2019-03-05 08:06:59 +08:00
旁边写上
A 1
B 1
然后新增一列,VLOOKUP,模糊匹配 false,IFERROR/IFNA 为 0
然后 SUM

或者旁边写上
A
B
然后新增一列,IF(ISERROR(VLOOKUP)),0 和 1
然后 SUM

关键词变多了就接着往下面加
krixaar
2019-03-05 08:08:08 +08:00
@krixaar 不对看错题了,请无视我……
krixaar
2019-03-05 08:14:12 +08:00
和上面思路差不多,新增一列,SEARCH 关键字,然后 ISERROR 判断有没有包含关键字,OR 判断是不是满足任一个关键字,根据 OR 的结果 IF 设置有则 1 无则 0,SUM 新增的这一列。
no1xsyzy
2019-03-05 13:36:10 +08:00
使用辅助列,随后隐藏该列
为了可扩展性可以将辅助列设为很后面的 YA, YB,... ,然后把正常列的 最后一列之后一列 到 辅助列最后一列 都隐藏

以图为例
设 “姓名” 在 A1
YA2 = IF(AND(ISERROR(SEARCH("a",B2)),ISERROR(SEARCH("b",B2))), 0, 1)
向右、下拖,共 28 列 2 行
然后 AD2 = SUM(YA2:ZB2)
no1xsyzy
2019-03-05 13:40:11 +08:00
哦发现还是用着 a、b,这个你会改了
大学的时候为了凑学分选的 Excel,Tutorial 一堆隐藏列解决

还有一找叫 VBA,其实这个比较通用。
fuxinya
2019-03-05 15:10:58 +08:00
按位与或操作可行?
例如,A 为 001,B 为 010,C 为 100 (二进制表示)
SELECT xx FROM table WHERE xx & mask > 0
其中,mask 为掩码,如果你想查询符合 A 或 B 的,那么掩码设为 011 (即十进制的 3 )
题目没细看,不符合要求请无视
fuxinya
2019-03-05 15:14:23 +08:00
好吧,看错,是 excel 统计,告辞。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/540933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX