Как создать макрос, который суммирует любое количество строк и выводит итоговую сумму в правильную строку? - PullRequest
0 голосов
/ 23 мая 2019

Раз в месяц я делаю сводные счета, которые мы синхронизируем из онлайн и форматируем. Я хочу автоматизировать формат, и у меня есть; однако я не могу заставить его менять строки из одного счета в другой, потому что они никогда не совпадают. Один может быть 195 строк, а другой 320.

Например, в этой части мне нужно отсортировать в столбце D, но не всегда, в строку 272. Как я могу получить его для поиска в любой нужной точке?

ActiveWorkbook.Worksheets("invoicedetails").Sort.SortFields.Add Key:=Range( _
    "D2:D272"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal

ActiveCell.Offset(0, -16).Range("A1:P121").Select
Selection.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(16), _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True

ActiveCell.Offset(0, 3).Columns("A:A").EntireColumn.Select
Selection.AutoFilter
Selection.AutoFilter
ActiveSheet.Range("$D$1:$D$181").AutoFilter Field:=1, Criteria1:=Array( _
    "3821463 Total", "3827540 Total", "3827541 Total", "3827543 Total", "3827544 Total" _
    , "3827556 Total", "3827558 Total", "3827559 Total", "3827560 Total", _
    "3827562 Total", "3827563 Total", "3827564 Total", "3827576 Total", "3827577 Total" _
    , "3827579 Total", "3827580 Total", "3827581 Total", "3827583 Total", _
    "3827584 Total", "3827596 Total", "3848953 Total", "3848980 Total", "3850398 Total" _
    , "3850421 Total", "3863863 Total", "3863864 Total", "3904249 Total", "Grand Total") _
    , Operator:=xlFilterValues

Это то, что записывается, когда я делаю промежуточный итог для общего итога, и общий итог печатает примерно на 30 строк ниже

1 Ответ

0 голосов
/ 23 мая 2019

Пока столбец D не имеет пустых мест внутри, вы можете использовать что-то вроде Range("D1").End(xlDown) (End.Down) эквивалентно нажатию Ctrl + Down), это вернет последнюю ячейку, содержащую данные в таблице Excel.

Range("D1").End(xlDown).Row вернет номер строки, который вам нужно использовать

Если у вас есть пустые ячейки в столбце D, вы также можете использовать столбец идентификатора, в котором есть данные в каждой строке, чтобы получитьряд.

Затем вы можете изменить диапазон, чтобы включить строку, просто конкатенируя ее, как do: Range("D1:D" & Range("D1").End(xlDown))

Это не самое элегантное решение, но для меня оно было самым надежным для аналогичныхпроблемы.Вы также можете посмотреть на атрибуты CurrentRegion и UBound, которые также могут помочь, но, как я уже сказал, я считаю, что End для работы лучше всего

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