Макрос для суммирования нескольких столбцов - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть таблица в Excel, я хочу использовать макрос для суммирования суммы базы по 3 столбцам критериев. Это моя таблица

enter image description here

, поэтому Основными критериями для суммирования являются столбец VendorName, Customer и Date.

Когда я щелкнул по кнопке, то если VendorName, Customer и date совпадают, то в столбце E (промежуточный итог) появится следующее значение

(при группировке по цвету нет необходимости давать цвет в макросе)

enter image description here

У меня есть такой макрос

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

Всегда отображается N / A в столбце E

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Я думаю, что получил ответ от @BrownishMonster, используя 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
0 голосов
/ 26 февраля 2020

Это не использует VBA, поэтому не правильно отвечает на ваш вопрос, однако вы можете использовать формулу Excel.

Вы можете использовать функцию SumIfs так:

=SumIfs(D:D,A:A,A2,B:B,B2)

Вы бы скопировали эту формулу в каждую строку, заменив A2 and B2` номером строки.

Эта формула суммирует все значения в column D в строках, которые соответствуют всем следующим условиям:

  1. Текст в column A для RowX соответствует тексту в column A для Row0
  2. Текст в column B для RowX соответствует текст в column B для Row0

Где 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)





Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...