Excel - Ein Makro zum Erstellen einer neuen Arbeitsmappe und zum Kopieren von Daten

Problem

Ich suche ein Makro zum Kopieren von Zeilen basierend auf dem Teilzelleninhalt einer Spalte. Ich habe eine Excel-Tabelle mit dem Namen "arc.xlsx", aus der ich Daten in andere wenige neue Excel-Dateien kopieren möchte, wenn bestimmte Kriterien erfüllt sind. Die in der Excel-Datei enthaltene Position lautet C: \ Dokumente und Einstellungen \ xxxx \ Desktop \ Company. Bin nur ein Anfänger in Excel.

Unten sehen Sie ein Beispiel für arc.xlsx

 GP BR CUST_NO CUST_NAME Tag Mo Jahr I1 01 999999 SMITH 00 08 09 I1 ab 999999 SMITH 04 08 09 I1 CD 999999 SMITH 04 10 09 I1 01 999999 SMITH 04 01 10 I1 02 999999 SMITH 27 02 10 I1 01 999999 SMITH 27 02 I1 CD 999999 SMITH 02 03 10 I1 CD 999999 SMITH 04 03 10 I1 CD 999999 SMITH 30 07 09 I1 ab 999999 SMITH 30 07 09 I1 02 999999 SMITH 30 07 09 
  • Ich möchte, dass das Makro Zeilen kopiert, die 'ab' in der Spalte B (mit dem Titel BR) enthalten, und sie in einer neuen Excel-Datei mit dem Namen ab.xlsx im selben Ordner speichert.
  • Und das Gleiche gilt für 'cd', '01' und '02', indem die Daten in Dateien mit dem Namen cd.xlsx, 01.xlsx usw. gespeichert werden.

Lösung

1. MACHEN SIE EINE SICHERUNG IHRES ARBEITSBUCHS

2. Öffnen Sie das Arbeitsbuch

3. Drücken Sie ALT + F11 (ALT und F11 gleichzeitig). Diese offene VBE

4. Klicken Sie im Menü von VBE auf Einfügen und wählen Sie dann Modul aus, indem Sie darauf klicken. Dies öffnet ein leeres Modul

5. Kopieren Sie den nach den Anweisungen angegebenen Code, indem Sie den Code auswählen (der nach den Anweisungen angezeigt wird) und STRG + C drücken (beide Tasten gleichzeitig).

6. Fügen Sie den Code in das neu hinzugefügte Modul ein (siehe Schritt 4), indem Sie auf das Modul klicken und STRG + V drücken (erneut beide gleichzeitig).

7. Stellen Sie sicher, dass der eingefügte Code keine rote Linie enthält.

8. Drücken Sie F5, um den Makro auszuführen.

9 Überprüfen Sie die Dokumente an dem Standardspeicherort, an dem Excel die Datei im Allgemeinen speichert.

HIER IST DER CODE

 Sub details () Dim thisWB As String Dim newWB As String thisWB = ActiveWorkbook.Name On Error Fortsetzen Next Sheets ("Arbeitsblatt"). Löschen On Error GoTo 0 Sheets.Add ActiveSheet.Name = "Arbeitsblatt" Sheets ("Arbeitsblatt1"). Select If ActiveSheet.AutoFilterMode Then Cells.Select On Error Resume Next ActiveSheet.ShowAllData On Error Gehe zu 0 End If Columns ("B: B"). Select Selection.Copy Sheets ("tempsheet"). Select Range ("A1"). Wählen Sie ActiveSheet.Paste Application.CutCopyMode = False If (Cells (1, 1) = "") Then lastrow = Cells (1, 1) .End (xlDown) .Row If lastrow Rows.Count Then Range ("A1: A" & lastrow - 1). Select Selection.Delete Shift: = xlUp End If End If Columns ("A: A"). Select Columns ("A: A"). AdvancedFilter Action: = xlFilterCopy, _ CopyToRange: = Range (" B1 "), Unique: = True Columns (" A: A "). Delete Cells.Select Selection.Sort _ Key1: = Range (" A2 "), Order1: = xlAscending, _ Header: = xlYes, OrderCustom: = 1, _ MatchCase: = False, Orientation: = xlTopToBottom, _ DataOption1: = xlSortNormal lMaxSupp = Cells (Rows.Count, 1) .End (xlUp) .Row For s uppno = 2 To lMaxSupp Windows (thisWB) .Activate supName = Sheets ("tempsheet"). Range ("A" & suppno) If supName "" Dann Workbooks.Add ActiveWorkbook.SaveAs supName newWB = ActiveWorkbook.Name Windows (thisWB). Blätter aktivieren ("Sheet1"). Zellen auswählen. Wenn ActiveSheet.AutoFilterMode = False dann Selection.AutoFilter End If Selection.AutoFilter Feld: = 2, Criteria1: = "=" & supName, _ Operator: = xlAnd, Criteria2: = "" lastrow = Cells (Rows.Count, 2) .End (xlUp) .Row Rows ("1:" & lastrow) .Copy Windows (newWB) .Activate ActiveSheet.Paste ActiveWorkbook.Save ActiveWorkbook.Close End If Next Sheets ( "tempsheet"). Blätter löschen ("Sheet1"). Wählen Sie Wenn ActiveSheet.AutoFilterMode Dann Cells.Select ActiveSheet.ShowAllData End If End Sub 

Vielen Dank an Rizvisa1 für diesen Tipp.

Vorherige Artikel Nächster Artikel

Top-Tipps