Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 宏到Sumif多列_Excel_Vba - Fatal编程技术网

Excel 宏到Sumif多列

Excel 宏到Sumif多列,excel,vba,Excel,Vba,我在excel中有一个表格,我想使用宏根据3个条件列求和金额 这是我的桌子 因此,合计金额的主要标准是VendorName、Customer和Date列 当我点击按钮时,如果VendorName、Customer和date是相同的值,则E列(小计)将显示如下 (基于颜色的分组无需在宏中给出颜色) 我有这样的宏 Dim i As Long Dim Condition As Variant Dim AVal As Variant Dim LastRow As Long Dim Hide, pop

我在excel中有一个表格,我想使用宏根据3个条件列求和金额 这是我的桌子

因此,合计金额的主要标准是VendorName、Customer和Date列

当我点击按钮时,如果VendorName、Customer和date是相同的值,则E列(小计)将显示如下

(基于颜色的分组无需在宏中给出颜色)

我有这样的宏

Dim i As Long
Dim Condition As Variant
Dim AVal As Variant
Dim LastRow As Long
Dim Hide, popup  As Long
Dim message  As String

Dim sht As Worksheet
'----------------------------
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")
'---------------------------
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Application.AskToUpdateLinks = False
        Application.DisplayAlerts = False
        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = False
        Application.StatusBar = False
'------------------
Columns.EntireColumn.Hidden = False
Rows.EntireRow.Hidden = False
Columns("E:G").EntireColumn.Delete
Range("E:G").EntireColumn.Insert
Range("E1").Value = "SubTotal"

Set sht = ActiveSheet

LastRow = sht.Range("B" & Rows.Count).End(xlUp).Row
'-------------------

For i = 2 To LastRow ' with last row count
     Condition = "A" & i & "=A" & i & "B" & i & "=B" & i & "C" & i & "=C" & i
    AVal = "A" & i & "B" & i & "C" & i
     Worksheets("VendorTotal").Range("E" & i).Formula = "=IF(" & Condition & ",SUMIF(A:C," & AVal & ",D:D))"

Next i

它总是在E列中显示N/A,这不使用VBA,因此不能正确回答您的问题,但您可以使用Excel公式

您可以这样使用该功能:

=SumIfs(D:D,A:A,A2,B:B,B2)
您可以将此公式复制到每一行中,替换行号为的
A2和
B2`

此公式将对符合以下所有条件的行的
列D
中的所有值求和:

  • RowX的
    列A
    中的文本与
    Row0的
    列A
    中的文本匹配
  • RowX的
    列B
    中的文本与
    Row0的
    列B
    中的文本匹配
  • 其中,
    Row0
    是输入公式的行,
    RowX
    是匹配公式的行

      |   Vendor Name  |   Customer   |   Date   |   Amount   |   SubTotal
    --+----------------+--------------+----------+------------+--------------
    2 |PT ABC          | Asep         | 1/1/2020 | 1,000      | =SumIfs(D:D,A:A,A2,B:B,B2)
    3 |PT ABC          | Asep         | 1/1/2020 | 2,000      | =SumIfs(D:D,A:A,A3,B:B,B3)
    4 |PT ABC          | Asep         | 1/1/2020 | 3,000      | =SumIfs(D:D,A:A,A4,B:B,B4)
    5 |PT ABC          | Reni         | 1/1/2020 | 1,000      | =SumIfs(D:D,A:A,A5,B:B,B5)
    6 |PT XYZ          | Yono         | 1/1/2020 | 9,000      | =SumIfs(D:D,A:A,A6,B:B,B6)
    7 |PT XYZ          | Yono         | 1/1/2020 | 1,000      | =SumIfs(D:D,A:A,A7,B:B,B7)
    8 |PT XYZ          | Yono         | 1/1/2020 | 4,000      | =SumIfs(D:D,A:A,A8,B:B,B8)
    9 |PT MNO          | Asep         | 1/1/2020 | 4,000      | =SumIfs(D:D,A:A,A9,B:B,B9)
    10|PT MNO          | Asep         | 1/1/2020 | 2,000      | =SumIfs(D:D,A:A,A10,B:B,B10)
    
    
    
    
    
    

    我想我从回答“棕色怪物”中得到了启示 使用SUMIFS,我已将其设置为宏按钮

    Dim i As Long
    Dim Condition As Variant
    Dim AVal As Variant
    Dim LastRow As Long
    Dim Hide, popup  As Long
    Dim message  As String
    
    Dim sht As Worksheet
    '----------------------------
    Dim dictionary As Object
    Set dictionary = CreateObject("scripting.dictionary")
    '---------------------------
            Application.ScreenUpdating = False
            Application.EnableEvents = False
            Application.AskToUpdateLinks = False
            Application.DisplayAlerts = False
            Application.Calculation = xlAutomatic
            Application.ScreenUpdating = False
            Application.StatusBar = False
    '------------------
    Columns.EntireColumn.Hidden = False
    Rows.EntireRow.Hidden = False
    Columns("E:Z").EntireColumn.Delete
    Range("E:Z").EntireColumn.Insert
    Range("E1").Value = "Sum Total "
    
    Set sht = ActiveSheet
    
    LastRow = sht.Range("B" & Rows.Count).End(xlUp).Row
    '-------------------
    
    
    For i = 2 To LastRow ' with last row count =SUMIFS(I:I,A:A,A8,B:B,B8,C:C,C8)
    
         AVal = "A" & i
    
         BVal = "B" & i
    
         CVal = "C" & i
         Worksheets("Sheet1").Range("E" & i).Formula = "=SUMIFS(D:D,A:A," & AVal & ",B:B," & BVal & ",C:C," & CVal & ")"
    
    Next i
    

    ........ 只是一个简单的建议,您的
    条件
    AVal
    的字符串构建是错误的。我建议你手工构建一个公式,将它与代码生成的结果进行比较,然后从中调整代码。谢谢,伙计,我已经将你的公式转换为宏,现在它可以工作了