#excel #vba
Вопрос:
Это код VBA Excel.
Sub Sales_Macro()
'
' Sales_Macro Macro
'
'
Rows("1:10").Select
Selection.Delete Shift:=xlUp
Range("E:E,H:H,K:K,N:N").Select
Range("N1").Activate
Selection.Delete Shift:=xlToLeft
Selection.End(xlToLeft).Select
Columns("A:A").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$A$298").AutoFilter Field:=1, Criteria1:=Array( _
"Accountant: ANNE", "Accountant: ANTHONY", "Accountant: BRADD", _
"Accountant: BRIAND", "Accountant: BRIANP", "Accountant: CODY", _
"Accountant: CYRUS", "Accountant: DAN", "Accountant: DEBBIE", "Accountant: DONNA", _
"Accountant: EKATERINA", "Accountant: JEFF", "Accountant: JENN", _
"Accountant: JEREMY", "Accountant: JOSEPH", "Accountant: SHEEJA123"), Operator _
:=xlFilterValues
Cells.Select
Cells.EntireColumn.AutoFit
Range("K1").Select
ActiveCell.FormulaR1C1 = "=RC[-10]"
Range("K1").Select
Selection.FillDown
Я знаю, что для последней строки потребуется диапазон, чтобы не возникала ошибка «1004». Но проблема в том, что, когда я записывал макрос, чтобы получить код, не был определен диапазон. И заполненные ячейки не являются линейными. Клетки идут как K1, K22, K24 и т. Д. (потому что я использую фильтр).
Ответ №1:
Я предполагаю, что вы хотите, чтобы ваше заполнение влияло только на видимые строки после применения автофильтра. Вы не можете просто применить заполнение к набору несмежных строк, которые видны после применения автофильтра. Вы должны выполнить итерацию по каждой прямоугольной подобласти.
Во-первых, в верхней части вашей подпрограммы добавьте следующую инструкцию для объявления двух переменных, FilterRng и SubRng:
Dim FilterRng as Range, SubRng as Range
Затем вместо последних четырех строк кода сделайте это, чтобы найти видимый диапазон и выполнить итерацию по областям:
Set FilterRng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible) 'Set a range of visible rows
For Each SubRng In FilterRng.Areas 'Go through each set of contiguous rows
SubRng(1, 11).FormulaR1C1 = "=RC[-10]"
If SubRng.Rows.Count > 1 Then SubRng.FillDown
Next SubRng