Если ваши необработанные данные не имеют строки заголовка, я бы использовал al oop, чтобы собрать целевые ячейки и скопировать их соответствующим образом.
Вам нужно будет обновить ваш 3 целевых значения внутри Arr
до Charlie1
, Martin1
и т. Д. c.
Шаги макросов
- L oop через каждое имя в
Arr
- L oop через каждую строку в
Sheet1
- Добавить целевую строку в
Union
( набор ячеек ) - Скопировать
Union
на целевой лист, где цель Sheet Index # = Arr position + 1
Sub Filt()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim cs As Worksheet
Dim Arr: Arr = Array("Value1", "Value2", "Value3")
Dim x As Long, Target As Long, i As Long
Dim CopyMe As Range
'Create 3 Sheets, move them to the end, rename
For x = 1 To 3
Set cs = ThisWorkbook.Sheets.Add(After:=Sheets(ThisWorkbook.Sheets.Count))
cs.Name = "Index" & x
Next x
lr = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
'Loop through each name in array
For Target = LBound(Arr) To UBound(Arr)
'Loop through each row
For i = 1 To lr
'Create Union of target rows
If ws.Range("F" & i) = Arr(Target) Then
If Not CopyMe Is Nothing Then
Set CopyMe = Union(CopyMe, ws.Range("F" & i))
Else
Set CopyMe = ws.Range("F" & i)
End If
End If
Next i
'Copy the Union to Target Sheet
If Not CopyMe Is Nothing Then
CopyMe.EntireRow.Copy Destination:=ThisWorkbook.Sheets("Index" & Target + 1).Range("A1")
Set CopyMe = Nothing
End If
Next Target
End Sub
Протестировано и работает, как и ожидалось, с моей стороны, однако ....
Если бы у вас были заголовки, это было бы намного проще с копированием / вставкой. Если вы дважды запускаете один и тот же макрос в одной и той же книге, это сломается по многим причинам, таким как дублирование имен листов, нарушение отношения между Sheet Index # = Arr Position + 1
, et c ...