我正在尝试从表中提取一些数据,但由于某些数据“混乱”,我无法SUMIFS
像平常一样进行简单的操作。为了获取所需的信息,我只能使用一些数组公式。我可以使用大部分公式,但我觉得我应该能够将几个语句合并为一个,但我无法让它工作。以下是我的数据的简化版本:
A | 乙 | C | |
---|---|---|---|
1 | 物品 | 月 | 数量 |
2 | 产品Apples123 | 一月 | 101 |
3 | 产品Apples234 | 一月 | 202 |
4 | 产品Cherrys111 | 一月 | 303 |
5 | 产品草莓222 | 一月 | 404 |
6 | 产品Cherrys111 | 二月 | 505 |
7 | 产品苹果345 | 二月 | 606 |
举个例子,我想计算一月份所有苹果的销售总额。(上述数据的期望结果是 303;即前两行的 101+202。)不幸的是,“苹果”这个名字被埋在其他一些并不总是相同的垃圾文本中,所以我不能这样做:
SUMIFS(C2:C7,A2:A7,"Apples",B2:B7,"January")
问题是“Apples”与 A 列中的内容不完全匹配。
我使用数组公式并得到以下结果:
{=IF(NOT(ISERROR(FIND("Apples",A2:A7))),C2:C7,"")}
这给了我一个如下所示的表格:
1 | 101 |
2 | 202 |
3 | |
4 | |
5 | |
6 | |
7 | 606 |
这给了我所有售出的苹果数量,但这对我只想要 1 月份售出的苹果数量没有帮助。我尝试AND()
在公式中加入一个函数,如下所示:
{=IF(AND(NOT(ISERROR(FIND("Apples",A2:A7))),B2:B7="January"),C2:C7,"")}
由于没有匹配项,因此只会给我一个空列表。
到目前为止,我能做的是使用第一个数组函数创建一个匹配项列表,然后通过一个SUMIF
函数将它与我的其他列表结合起来,如下所示:
这进入 G2-G7 列:
{=IF(NOT(ISERROR(FIND("Apples",A2:A7))),C2:C7,"")}
这个公式给了我我想要的结果:
=SUMIF(B2:B7,"January",G2:G7)
如果不太明显的话,我很少使用数组公式。如果有人能给我指明正确的方向,我将不胜感激。
我的方法有效,但感觉很奇怪。我觉得我应该能够压缩它,但我不知道该怎么做。
编辑:
Scott Craner 指出我可以在SUMIFS
搜索中使用通配符,这给了我很大的帮助。不幸的是,我在发布电子表格时已经简化了电子表格的另一部分,我不知道该如何处理。我一直专注于产品识别,所以我删除了这一复杂性,因为我认为它是多余的。
就我而言,月份的列出方式与我展示的并不一样,只是简单的月份名称。相反,它们是日期/时间条目,例如“1/3/2022 1:55 PM”。我一直使用数组公式(如图所示)来获取商品匹配时销售数量的列表,然后我在创建 yyyy-mm 字段(例如 2022-1)的同时创建了另一个列表。然后我过去常常SUMIF
将每个月的数量加起来。
我可以使用 Scott C. 提到的通配符搜索来识别具有匹配产品的行 - 效果很好。但是,我不知道如何将通配符与这样的日期一起使用。我确实尝试过使用这样的通配符,但没有成功(我假设您不能在中间字符串):
=SUMIFS(C2:C7,A2:A7,"*Apples*",'B2:B7,"*1/*/2022*")
我的日期实际上是这样的:
A | 乙 | C | |
---|---|---|---|
1 | 物品 | 月 | 数量 |
2 | 产品Apples123 | 2022 年 1 月 3 日上午 9:21:18 | 101 |
3 | 产品Apples234 | 2022 年 1 月 19 日下午 4:02:50 | 202 |
4 | 产品Cherrys111 | 2022 年 1 月 7 日下午 4:22:36 | 303 |
5 | 产品草莓222 | 2022 年 1 月 12 日上午 8:33:49 | 404 |
6 | 产品Cherrys111 | 2022 年 2 月 10 日下午 1:42:15 | 505 |
7 | 产品苹果345 | 2022 年 2 月 10 日下午 1:37:30 | 606 |
答案1
它似乎AND()
在数组公式中不起作用。(我认为这比这更微妙,我希望有人能教我这一点。)我能想到的最接近你的公式的方法是将其替换AND()
为*
(乘法):
=SUM(IF((NOT(ISERROR(FIND("Apples",A2:A7))))*(B2:B7="January"),C2:C7,""))
↑ ↑⇑↑ ↑
但我同意另一位斯科特的观点,这=SUMIFS(C2:C7,A2:A7,"*Apples*",B2:B7,"January")
是一个更好的答案。
针对你问题倒数第二段中的假设(隐含的反问),我回答道:是的,你能在字符串中间使用通配符。但您不能对日期使用字符串匹配技术。
为了演示,这里有一些与您的格式相同的数据:
A | C | ||
---|---|---|---|
1 | 物品 | 数量 | |
2 | 猫 | 1 | |
3 | 婴儿床 | 2 | |
4 | 挖 | 4 | |
5 | 狗 | 10 | |
6 | 城市 | 20 | |
7 | 绷带 | 40 |
下面,第二列包含公式;即,它使用同一行(下方)第一列中的搜索词(条件)来搜索上面的数据。第三列包含注释。=SUMIFS(C$2:C$7, A$2:A$7, An)
搜索词 | 公式结果 | 评论/解释 |
---|---|---|
猫 | 1 | 匹配第 2 行,猫 |
狗 | 10 | 匹配第 5 行,狗 |
*哦* | 12 | 匹配第 3 行和第 5 行:cot 和 dog 这类似于“*Apples*”搜索。 |
嗎 | 3 | 匹配第 2 行和第 3 行:cat 和 cot |
d*g | 14 | 匹配第 4 行和第 5 行:挖和狗 |
嗎*t* | 23 | 匹配第 2、3 和 6 行:cat、cot 和 city |
天*天* | 14 | 与 d*g 结果相同 |
*天*天* | 54 | 匹配第 4、5 和 7 行:dig、dog 和 bandage (包含“d”后跟“g”) |
附言我鼓励您使用像我这样的测试数据(1、2、4、10、20、40),而不是您使用的 1、2、3、4、5、6 序列。对于您的数据,如果您尝试一个公式并得到结果 505,您不知道它是来自第 6 行(包含 505),还是来自 101+404,还是来自 202+303。对于我的数据,如果我们得到的结果为 55,那么它只能是 1+4+10+40。