Ich muss neue Registerkarten in einer Arbeitsmappe basierend auf einer Reihe von Zellen in einer Arbeitsblattvorlage erstellen. Ich möchte auch Datenzeilen löschen, die nicht mit dem Tabnamen übereinstimmen. Zum Beispiel würde ich aus der Tabelle unten eine neue Registerkarte mit dem Namen "2206 - 6" haben, und nur die damit verbundenen Daten bleiben erhalten, wobei zu berücksichtigen ist, dass sich dieser Datenbereich jedes Mal ändert, wenn das Makro verwendet wird.VBA Advanced AutoFilter + Erstellen neuer Blätter basierend auf Bereich
Vor:
Nach:
Interval Anzahl 2206-6 6304-5 4102 - 20
Die Tabelle beginnt in Zeile 11, aber ich muss alle oben genannten Informationen behalten. Ich habe einen erweiterte Filter-Makro, das zu nahe kommt, was ich will, aber es ist zu tun zwei Dinge, die ich nicht wollen: leer Registerkarten erstellen und keine Informationen über Zeile 11.
Sub parse_data()
Dim lr As Long
Dim ws As Worksheet
Dim vcol, i As Integer
Dim icol As Long
Dim myarr As Variant
Dim title As String
Dim titlerow As Integer
vcol = 1
Set ws = Sheets("Offshore Searches")
lr = ws.Cells(ws.Rows.Count, vcol).End(xlUp).Row
title = "A11:G20"
titlerow = ws.Range(title).Cells(1).Row
icol = ws.Columns.Count
ws.Cells(1, icol) = "Unique"
For i = 2 To lr
On Error Resume Next
If ws.Cells(i, vcol) <> "" And _
Application.WorksheetFunction.Match(ws.Cells(i, vcol), ws.Columns(icol), 0) = 0 Then
ws.Cells(ws.Rows.Count, icol).End(xlUp).Offset(1) = ws.Cells(i, vcol)
End If
Next
myarr = Application.WorksheetFunction.Transpose(ws.Columns(icol).SpecialCells(xlCellTypeConstants))
ws.Columns(icol).Clear
For i = 2 To UBound(myarr)
ws.Range(title).AutoFilter field:=vcol, Criteria1:=myarr(i) & ""
If Not Evaluate("=ISREF('" & myarr(i) & "'!A1)") Then
Sheets.Add(after:=Worksheets(Worksheets.Count)).Name = myarr(i) & ""
Else
Sheets(myarr(i) & "").Move after:=Worksheets(Worksheets.Count)
End If
ws.Range("A" & titlerow & ":A" & lr).EntireRow.Copy Sheets(myarr(i) & "").Range("A1")
Sheets(myarr(i) & "").Columns.AutoFit
Next
ws.AutoFilterMode = False
ws.Activate
End Sub
Ich habe auch einen Makro beibehalten, die erzeugen Reiter ohne den erweiterten Filter auf einem Bereich basiert, so dass jeder Reiter sieht identisch (nur die Registerkarte Namensänderungen)
Sub CreateWorkSheetByRange()
Dim WorkRng As Range
Dim ws As Worksheet
Dim arr As Variant
On Error Resume Next
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
arr = WorkRng.Value
Sheets("Offshore Searches").Select
Cells.Select
Selection.Copy
Application.ScreenUpdating = False
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
Set ws = Worksheets.Add(after:=Application.ActiveSheet)
ws.Name = arr(i, j)
ActiveSheet.Paste
Range("A1").Select
Next
Next
Application.ScreenUpdating = True
End Sub
gibt es eine Möglichkeit, beide Registerkarten erstellen, basierend auf einem Bereich, während sie gleichzeitig einen erweiterten Filter verwenden?
Können Sie auch eine resultierende Registerkarte anzeigen? (ein erwartetes Ergebnis) –
Ich habe gerade den Beitrag mit dem "Resultierende Tab" Bild aktualisiert und hier ist auch der Link: https://i.stack.imgur.com/xY4uZ.png – Aimaria
ok, ich werde deine Frage aktualisieren um beide Bilder aufzunehmen - wir bevorzugen alle Bilder, die in der Frage enthalten sind, weil einige Benutzer keinen Zugang zu anderen Seiten haben –