Excel 宏到Sumif多列
我在excel中有一个表格,我想使用宏根据3个条件列求和金额 这是我的桌子 因此,合计金额的主要标准是VendorName、Customer和Date列 当我点击按钮时,如果VendorName、Customer和date是相同的值,则E列(小计)将显示如下 (基于颜色的分组无需在宏中给出颜色) 我有这样的宏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
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
的字符串构建是错误的。我建议你手工构建一个公式,将它与代码生成的结果进行比较,然后从中调整代码。谢谢,伙计,我已经将你的公式转换为宏,现在它可以工作了