Как циклически проходить через отфильтрованный диапазон, используя другой автоматический фильтр в другом столбце?

У меня есть фильтр, примененный к столбцу F на основе критерия (> 1) rng.AutoFilter Field:=6, Criteria1:=">1" где rng устанавливается для данных через VBA раньше.

Теперь из отфильтрованных строк я хочу применить еще один фильтр на Col E (5) и прокрутить каждое из уникальных видимых значений в Col E и выполнить некоторые сравнения данных и определить, сохранять ли их или удалять эти строки, но я не делаю Не знаете, какие значения будут показаны – это зависит от первого фильтра – как это сделать?

Вот и весь код:

 Sub CashFlowReporting() Dim Dest, Source As Workbook Dim DestCell As Range Dim sh, ws, data As Worksheet Dim x, y, r, c, m, s As Integer Dim fname, sname, txt As String Dim starttime, endtime, dtDate As Date Dim ans As VbMsgBoxResult Dim rng, rng1 As Range Application.ScreenUpdating = False Application.DisplayAlerts = False starttime = Now fname = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls;*.xlsx;*.xlsm), *.xls;*.xlsx;*.xlsm", Title:="Select the Term Changes Query Results file.") If fname = False Then Exit Sub ans = MsgBox("Is " & fname & "the Term Changes Query Results excel file?", vbYesNo) If ans = vbYes Then Workbooks.Open Filename:=fname Else MsgBox ("Please run the cash flow report genrator again and select the query results file.") Exit Sub End If Set Source = ActiveWorkbook Set sh = ActiveSheet sh.Range("E:F").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("E1").Value = "Number_Site" Range("F1").Value = "Count Num_Site" Range("E2").FormulaR1C1 = "=RC[-3]&RC[-1]" r = Range("A1").End(xlDown).Row Range("E2", Cells(r, "E")).FillDown Columns("E:F").AutoFit Set rng = Range("A1") Set rng = Range(rng, rng.End(xlToRight)) Set rng = Range(rng, rng.End(xlDown)) rng.Name = "Data" Range("A2", Range("A2").End(xlDown)).Name = "Date" Range("E2", Range("E2").End(xlDown)).Name = "Num_site" sh.Sort.SortFields.Clear sh.Sort.SortFields.Add Key:=Range("Num_site") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal sh.Sort.SortFields.Add Key:=Range("Date") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With sh.Sort .SetRange Range("Data") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("F2").Formula = "=countif($E$2:$E$1000,E2)" Range("F2", Cells(r, "F")).FillDown rng.AutoFilter field:=6, Criteria1:=">1" Set rng1 = rng.Rows.SpecialCells(xlCellTypeVisible) rng1.Select 

Теперь я хочу фильтровать по полю 5, но для каждого уникального значения в этом поле (цикл через него – в этом случае всего 2 – может быть больше)

Вот ссылка на скриншот снимка с первым фильтром, примененным на Col F, теперь я хотел бы циклически выполнить 2 уникальных значения (в данном случае) в Col E на основе этого фильтра:

данные

Если есть более элегантное решение, чем фильтр, то я открыт для этого – я пробовал Pivots и расширенные фильтры, но не смог найти решение.

Спасибо заранее, и вся помощь приветствуется.

В то время как Scripting.Dictionary может облегчить локализацию уникальных значений, для дублирования функциональности словаря Exists требуется всего несколько строк дополнительного кода.

 Dim rng As Range, ctv As Range, f As Long, vFLTR As Variant vFLTR = ChrW(8203) With ActiveSheet 'set this worksheet reference properly! If .AutoFilterMode Then .AutoFilterMode = False Set rng = .Cells(1, 1).CurrentRegion With rng .AutoFilter Field:=6, Criteria1:=">1" If Application.Subtotal(103, .Columns(5)) > 1 Then With rng.Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) For Each ctv In .Columns(5).Cells.SpecialCells(xlCellTypeVisible) If Not CBool(InStr(1, vFLTR, ChrW(8203) & ctv.Value & ChrW(8203), vbTextCompare)) Then vFLTR = vFLTR & ctv.Value & ChrW(8203) End If Next ctv vFLTR = Left(vFLTR, Len(vFLTR) - 1): vFLTR = Right(vFLTR, Len(vFLTR) - 1) vFLTR = Split(vFLTR, ChrW(8203)) End With For f = LBound(vFLTR) To UBound(vFLTR) .AutoFilter Field:=5, Criteria1:=vFLTR(f) MsgBox "pause and look" .AutoFilter Field:=5 Next f End If .AutoFilter End With End With 

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

Давайте будем гением компьютера.