Фильтровать и суммировать видимые ячейки в VBA

#excel #vba

#excel #vba

Вопрос:

В моем файле Excel есть несколько строк, связанных с одной и той же страной.

Мне нужно отфильтровать по коду ISO страны, затем суммировать квартальные данные за 2015 год, чтобы создать новый столбец с суммой, но суммой только с видимыми ячейками.
Затем повторите это для следующих лет (2016, 2017 и т. Д.).
Затем суммируйте итоги строк (например, за 2015 год) и скопируйте сумму в другую ячейку на другом листе того же файла.

Ниже вы можете найти мою попытку. Я запускаю два отдельных макроса:

MACRO1

 Sub Macro1()

Dim LR As Long

Sheets("WEBSTATS_DEBTSEC_DATAFLOW_csv_c").Select
Sheets("WEBSTATS_DEBTSEC_DATAFLOW_csv_c").Range("$A$1:$BF$218591").AutoFilter Field:=3, Criteria1:="SA"
    
LR = Range("AJ" amp; Rows.Count).End(.xlUp).Row
Range("AJ2" amp; LR).SpecialCells(xlCellTypeVisible).Select

End sub
  

МАКРОС2

 Sub Macro2()

    Sheets("Country Total").Select
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "=SUM(WEBSTATS_DEBTSEC_DATAFLOW_csv_c!R[346]C[36]:R[174666]C[36])"
    
End Sub
  

Комментарии:

1. Зачем вам нужно фильтровать, а затем суммировать только видимые элементы? Не будет ли стандартная функция Sumifs() работать для решения этой проблемы?

Ответ №1:

Я не думаю, что в этом случае необходимо использовать функцию фильтра. На самом деле даже VBA не нужен. Вы можете просто использовать SUMIF в Excel (https://exceljet.net/excel-functions/excel-sumif-function ) функция для данного конкретного случая.

Если вы хотите продолжать использовать функцию фильтра Excel (например, если вы хотите иметь возможность добавлять дополнительные критерии позже), функция Excel ПОДВЕДЕТ ПРОМЕЖУТОЧНЫЙ ИТОГ (https://support.microsoft.com/en-us/office/subtotal-function-7b027003-f060-4ade-9040-e478765b9939 ) функция может использоваться только для применения операции (т.е. суммирования) к «видимым» (= отфильтрованным) строкам