Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何使SUMIFS文本与另一列中的多个条件匹配?_Excel_Sumifs_Vba - Fatal编程技术网

Excel 如何使SUMIFS文本与另一列中的多个条件匹配?

Excel 如何使SUMIFS文本与另一列中的多个条件匹配?,excel,sumifs,vba,Excel,Sumifs,Vba,我希望对我的交易进行分类,以便我可以随时更改分类。我认为展示我所拥有的更容易解释 我有下列表格 交易 A:日期 C:姓名 D:金额 快餐清单: L:Name(部分名称,因为要进行字符串搜索) 我希望根据多个标准(如日期和类别)计算交易金额。下面是一个有效的公式: =SUMIFS(D:D,A:A,"*03/2013*",C:C,"*"&L3&"*") 有一个基本问题:它只支持快餐列表中的一项。有没有什么方法可以让我简单地在整个快餐店名称中进行文本字符串搜索? &L3&“到

我希望对我的交易进行分类,以便我可以随时更改分类。我认为展示我所拥有的更容易解释

我有下列表格

交易

  • A:日期
  • C:姓名
  • D:金额
快餐清单:

  • L:Name(部分名称,因为要进行字符串搜索)
我希望根据多个标准(如日期和类别)计算交易金额。下面是一个有效的公式:

=SUMIFS(D:D,A:A,"*03/2013*",C:C,"*"&L3&"*")
有一个基本问题:它只支持快餐列表中的一项。有没有什么方法可以让我简单地在整个快餐店名称中进行文本字符串搜索? &L3&“到”&L:L&“还是什么


这里有一些我试过的东西。 1) 使用布尔UDF修改SUMIFS标准“&L3&”。我在这里遇到的问题是,我不知道如何将SUMIF循环的当前行传递到函数中

Public Function checkRange(Check As String, R As Range) As Boolean

For Each MyCell In R
   If InStr(Check, MyCell.Value) > 0 Then
        checkRange = True
    End If
Next MyCell

End Function
如果我能发送支票给这个函数,我会被设置好的

2) 将SUMIFS的sum_范围替换为返回行范围的UDF

Public Function pruneRange(Prune_range As Range, Criteria_range As Range) As Range
Dim Out_R As Range
Dim Str As String

ActiveWorkbook.Sheets("Vancity Trans").Activate
' Loop through the prune_range to make sure it belongs
For Each Cell In Prune_range

    ' loop through criteria to see if it matches current Cell
    For Each MyCell In Criteria_range
        If InStr(Cell.Value, MyCell.Value) > 0 Then
            ' Now append cell to Out_r and exit this foreach
               ' Str = Str & Cell.Address() & ","
               Str = Str & "D" & Cell.Row() & ","
            Exit For
        End If
    Next MyCell
Next Cell

' remove last comma form str
Str = Left(Str, Len(Str) - 1)

' use str to set the range
Set Out_R = Range(Str)

' MsgBox (Str)

Set pruneRange = Out_R

End Function
这适用于常规求和循环,但由于某种原因,当我尝试在SUMIF或SUMIFS中使用它时,它会返回#值。另一个问题是,即使在SUM循环中,如果使用C:C而不是C1:CX,其中X是多少行,也会使excel崩溃,或者需要永远循环。我猜这是因为excel不知道在UDF中什么时候停止,除非我告诉它什么时候停止?

试试这个公式

=SUMPRODUCT(SUMIFS(D:D,A:A,“*03/2013*”,C:C,“*”&L3:L30&“*”)


通过使用范围(L3:L30)作为最终标准,SUMIFS公式将生成一个“数组”(28个值-L3:L30中的每个值一个)…并使用SUMPRODUCT对该数组求和,得到您想要的结果。

先生,您是我的英雄。非常感谢你。我希望我能把你的票数提高10倍,但上面说我没有足够的声誉。嘿,对不起,这项功能还有一件事。我在L3:L30中注意到的是,如果单元格为空,它似乎会计算该月内每个单元格的总和。我认为这是因为空单元格触发了对空格的文本搜索。我尝试使用IF和ISTEXT,但我不确定如何将其应用于范围。没问题……我明白你关于空格的意思,你可以在SUMPRODUCT函数中添加额外的检查来忽略L3:L30中的空格,即
=SUMPRODUCT(SUMIFS(D:D,a:a,“*03/2013*”,C:C,“*”&L3:L30&“*”)*(L3:L30“”)