Я хочу сделать сортировку и суммирование очень легко для пользователя, создав макрос. Макрос должен найти окончательную строку, затем отсортировать, затем промежуточные и итоговые. Он также должен использовать текущий активный лист. Например, я должен включить первую таблицу во второй:Сортировка и суммирование таблиц разных размеров
Я могу это сделать для этого набора данных с простой записью макроса.
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+B
'
ActiveWorkbook.Worksheets("Oct 2015").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Oct 2015").Sort.SortFields.Add Key:=Range("A2:A24" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Oct 2015").Sort.SortFields.Add Key:=Range("B2:B24" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Oct 2015").Sort
.SetRange Range("A1:C24")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(3), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3), _
Replace:=False, PageBreaks:=False, SummaryBelowData:=True
Range("A1:C45").Select
End Sub
У меня есть следующий фрагмент кода, чтобы найти последнюю строку, но не знаете, как интегрировать его в выше, чтобы заменить жесткий закодированное значение «Диапазон».
Sub GetLastRow(strSheet, strColum)
Dim MyRange As Range
Dim lngLastRow As Long
Set MyRange = Worksheets(strSheet).Range(strColum & "1")
lngLastRow = Cells(sheetvar.Rows.Count, MyRange.Column).End(xlUp).Row
End Sub
Я также необходимо изменить значение активного рабочего листа для текущего открытого листа, так как это значение будет меняться.
Имена столбцов и порядок столбцов должны быть согласованными. Мне также нужно будет поместить этот скрипт на компьютер удаленного пользователя и убедиться, что он был доступен, когда они открывали Excel.
Я также хотел бы, если это возможно, затенять промежуточные области, но это вторичный запрос.
Отличная работа с этим, ОП задал вопрос о том, что это будет для активного листа, а не только для одного листа, чтобы он мог использовать его больше, чем тот. Возможно, вместо этого измените ссылку sht на activesheet. –
Спасибо, Скотт, отредактировал мой ответ. – Balinti
Спасибо. Когда он был выполнен, я получил «Ошибка времени выполнения 1004»: ссылка недействительна ... – jabs