【问题标题】:Excel: Perform a SUMIF where the criteria is a comma-delimited listExcel:执行条件为逗号分隔列表的 SUMIF
【发布时间】:2016-08-05 00:16:32
【问题描述】:

在我的第一个 Excel 工作表中,我有一个 ID 和值表:

ID  VALUE
1   30
2   35
3   14
4   92

在我的第二个工作表中,我将在一列中提供一个以逗号分隔的 ID 列表,在第二列中,我想要这些 ID 值的计算总和,如下所示:

IDs     SUM
1,2     65
2,3,4   141
3       14

如何为第二个工作表的 SUM 列编写公式?如果可能,我想避免使用 VBA。

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    假设,对于您提供的示例表:

    1) 您的源表在Sheet1!A1:B5 范围内(第 1 行有标题)

    2) 您的结果表在Sheet2!A1:B4 范围内(第 1 行有标题)

    3) 结果表 A 列中条目的分隔符只能是一个逗号

    那么,在Sheet2!B2数组公式**:

    =SUM(IF(ISNUMBER(FIND(","&Sheet1!A$2:A$5&",",","&A2&",")),Sheet1!B$2:B$5))

    复制到B4

    问候

    **数组公式的输入方式与“标准”公式不同。不是只按 ENTER,而是先按住 CTRL 和 SHIFT,然后再按 ENTER。如果操作正确,您会注意到 Excel 在公式周围放置了大括号 {}(尽管不要尝试自己手动插入)。

    【讨论】:

      【解决方案2】:

      考虑使用列而不是逗号来分隔条件,然后您可以简单地将几个 Sumif 公式相加。用逗号分隔条件是个坏主意。

      编辑: 实际上,为什么不使用几十列呢? Excel 有很多,所以让我们使用它们。将逗号分隔的列表放入一列。甚至可能在另一张纸上。使用 Text to Columns 将值分成单独的列。允许一百。然后为每列添加一百列,其中包含一个 sumif 公式。在最右边,使用求和公式计算所有 sumif 语句的总和。

      您可以使用 VBA 执行 Text to Columns 的操作,并隐藏具有拆分值的列和具有公式的列,这样一来,您就可以在具有各自总计的列旁边为您的逗号分隔值留下一列。

      【讨论】:

      • 这也是我的偏好,但这是一个非常简化的示例。实际上,逗号分隔的列表可能包含几十个 ID。每个单元格分配一个并非不可能,但会有几十列而不是 1 列。
      • 在这种情况下你可能无法避免 VBA
      • 其实,何不使用几十列。将逗号分隔的列表放入第一列。使用文本到 c
      • 我在回答中添加了一个建议
      【解决方案3】:

      您可以使用用户定义的函数来实现这一点。

      Function GetSum(r As String) As Long
          Dim str1, str2
          Dim ws1 As Worksheet, ws2 As Worksheet
          Set ws1 = Worksheets("Sheet1")
          Set ws2 = Worksheets("Sheet2")
          Dim d As Long
          str1 = Split(r, ",")
          str2 = UBound(str1)
          For i = 0 To str2
              d = d + WorksheetFunction.SumIf(ws1.Range("A:A"), str1(i), ws1.Range("B:B"))
          Next i
          GetSum = d
      End Function
      

      假设您在 sheet1 和 sheet 2 中的数据都以 A2 开头,那么 在 Worksheet2 B2 中应用以下公式

      =getsum(A2)
      

      【讨论】:

        【解决方案4】:

        您始终可以从 teyyns aswer 中隐藏这些列,并将这些隐藏的列连接到一个单独的列中。

        或者在隐藏列中使用公式,例如:left(right($G2,len($G2)-2),1)。当您进入下一列时,right() 公式中的负 2 应该从 0 到 2 到 4 等。在 G 列中,用户可以指定像“1,2,3”这样的 ID。如果 len()-something 为负数,您还需要一个 if 函数才能使用 0 值。也许还有一个用“”替换“”的功能。

        希望对你有帮助

        【讨论】:

          【解决方案5】:

          迟到总比没有好,对吧?让我加两分钱。

          E2中的公式:

          =SUMPRODUCT(SUMIF(A$2:A$5,FILTERXML("<t><s>"&SUBSTITUTE(D2,",","</s><s>")&"</s></t>","//s"),B$2:B$5))
          

          向下拖动。

          【讨论】:

            【解决方案6】:

            你可以使用:

            =SUMPRODUCT(ISNUMBER(FIND(","&A$2:A$5&",",","&D3&","))*$B$2:$B$5)
            

            不带 CTRL SHIFT ENTER

            【讨论】:

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