【问题标题】:Wildcard condition with * for SUMIFS formula on a column with number values带有 * 的通配符条件用于具有数字值的列上的 SUMIFS 公式
【发布时间】:2014-09-01 08:46:05
【问题描述】:

我有一个巨大的 Excel 表格,看起来像这样:

╔══════╦══════╦═════╗
║  A   ║  B   ║  C  ║
╠══════╬══════╬═════╣
║ Jack ║ 2001 ║ 1,5 ║
║ Jack ║ 2002 ║ 2,0 ║
║ Jack ║ 2003 ║ 1,0 ║
║ Jack ║ 3001 ║ 3,5 ║
║ Jack ║ 3002 ║ 4,0 ║
║ Jack ║ 3003 ║ 1,0 ║
║ Jill ║ 2001 ║ 3,0 ║
║ Jill ║ 2002 ║ 5,0 ║
║ Jill ║ 2003 ║ 2,0 ║
║ Jill ║ 3001 ║ 0,5 ║
║ Jill ║ 3002 ║ 6,0 ║
║ Jill ║ 3003 ║ 2,5 ║
╚══════╩══════╩═════╝

B 列包含许多不同的数字,但它们都以数字 2、3 或 8 开头。B 列中的数字始终为 4 位数字;我只对检查第一个数字感兴趣。

我需要将 C 列的值相加,其中 B 列中相应单元格的第一个数字是 2*3*8*。我需要的是创建一个执行此操作的公式(Ruby-esque 伪代码):

sum = 0
spreadsheet_rows.each do |row|
  if row.a == "Jack" and row.b == "2*" # Note the second wildcard condition.
    sum += row.c
  end
end

puts sum # Should print 4,5 in this example.

我正在尝试在 Excel 中使用以下公式来完成此操作:

=SUMIFS($C:$C; $A:$A; "Jack"; $B:$B; "=2*")

我知道 Excel 不支持数字的通配符条件,但是,我在 Excel 中将 B 列格式化为“文本”类型,所以我认为它会被这样处理,但它似乎仍然被视为诠释。

=SUMIFS 中为 Excel 中的数值应用通配符条件是否有不同的方法?也许有一种方法可以以某种方式将整数“转换”为公式中的字符串?我还没有找到办法(还)。

我正在使用 Excel for Mac 2011。

【问题讨论】:

  • +1 表示╔ ASCII 表═╣
  • 都是4位数字吗? - 如果是这样,我认为 paxdiablo 的(已删除)建议效果最好 - 所有"IFS" 系列函数在可能的情况下有效地将非数字值转换为数字 - 这就是为什么=COUNTIF(A:A,2) 同时计算数字 2 和格式化为“2”的文本
  • @barryhoudini 是的,B 列中的数字始终是 4 位数字。
  • 好的,那么如果你想坚持使用 SUMIFS(比 SUMPRODUCT 更有效),那么使用 2 个标准,">=2000" 和 "
  • 哦,我的天哪……不敢相信我没有想到这一点,@barryhoudini。我非常专注于让 Excel 公式按照我想象的方式工作,以至于我没有看到明显的解决方案。感谢您向我指出。

标签: excel excel-formula excel-2011


【解决方案1】:

我会选择可读性较差但功能更强大的SUMPRODUCT

=SUMPRODUCT(($A:$A="Jack") * (LEFT($B:$B;1)="2") * ($C:$C))

这将为每个条件(第一个和第二个大括号部分)生成布尔数组,它将与第三个条件(您的数字)相乘。

编辑: 如 cmets 中所述,如果无法将列 C 中的任何值转换为数字,则可能出现 #VALUE 错误。为避免这种情况,您可以使用 barry houdini 建议的语法

=SUMPRODUCT(($A:$A="Jack") * (LEFT($B:$B;1)="2"); $C:$C)

让 SUMPRODUCT 跳过非数字。

【讨论】:

  • 似乎我过早地接受了这个答案,因为我的错误(以为我让它工作了,但仔细检查后我没有)。似乎它应该工作,所以我试图弄清楚为什么这对我现在不起作用。顺便提一句。我正在使用 Excel for Mac,不知道它是否有所作为。
  • 带有公式的单元格只显示#VALUE! 没有具体的错误消息,所以我不确定是什么问题。还在想办法。
  • 如果$C 列中的任何值不是数字,就会发生这种情况。然后,您可能想要使用 $C2:$C10000 之类的东西(对于 A 列和 B 列,分别相同)。
  • 啊!我们去吧!谢谢,@MP24 — 将所有整列选择器更改为特定范围后,它开始工作(即:=SUMPRODUCT(($A2:$A13="Jack") * (LEFT($B2:$B13;1)="2") * ($C2:$C13)))
  • 另一种方法是允许 SUMPRODUCT 乘以总和范围,而不是使用 *,例如此版本将允许 C 列中的文本 - =SUMPRODUCT((A:A="Jack")*(LEFT(B:B)="2"),C:C)
【解决方案2】:

这对我有用:

=SUM((A1:A12=F2)*(LEFT(B1:B12)=""&F3)*C1:C12)

使用 CtrlShiftEnter

作为数组公式输入

你问如何将数字转换为字符串;连接一个空字符串和一个数字""&F3 是一种方法。

【讨论】:

  • 我在 Excel for Mac 2011 上似乎找不到相当于 Ctrl+Shift+Enter 的功能。您是否知道如何在 Excel for Mac 中插入数组公式?
  • 感谢 Jean-Francois - 我只是在重复我读到的内容 - 我从未在 Mac 上使用过 Excel
  • 嗯。我在 Mac 版本中尝试使用 Command+Return 并没有发生任何事情,但可能是因为我的 Mac 的文化设置和键盘布局是挪威语或类似的东西(这些事情不会第一次在 Excel 中引起奇怪的问题)。
【解决方案3】:
{=SUM((A1:A12=F2)*(LEFT(B1:B12)=""&F3)*C1:C12)}

不需要如上所示的数组,只需键入以下公式即可得到与上述数组公式相同的结果

=SUMPRODUCT((A1:A12=F2)*(LEFT(B1:B12)=F3&"")*C1:C12)

记住区别[Arrays=""&F3] vs [SUMPRODUCT= F3&""] 我将被带到你的身边我只是非常非常非常高兴看到你的工作以及你权威地提出问题的方式

  "I know that Excel does not support wildcard conditions for numbers, however, I have 
   formatted column B as type "Text" in Excel, so I thought it would be treated as 
   such, but it appears that it is still treated as an int."

只有当我们必须以 TEXT 输出时,SUMPRODUCT 才起作用 希望您对以上所有内容进行验证并在显着位置突出显示

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多