Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Programmierung

VBA Programmierung
14.07.2022 14:23:24
Paul
Hallo zusammen,
ich habe folgendes Problem.
Wir bekommen halbjährlich eine Excel Datei mit ca. 1000 Einträgen, welche ich gerne nach Namen filtern und anschließend diese gefilterterten Daten in einzelne Excel Dateien speichern wollen würde.
So weit klappt auch alles wie oben beschrieben mit Makros (welche leider manuell eingerichtet werden müssen).
Beispiel: Makro 1:
Option Explicit

Sub Autofilter()
Tabelle2.Range("A5").Autofilter
Tabelle2.Range("A5").Autofilter Field:=4, Criteria1:="Paul"
Dim ws As Worksheet
Set ws = Worksheets.Add
With ws
.Name = "Paul"
End With
Tabelle2.UsedRange.SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range("A2")
End Sub

Beispiel Makro 2
Option Explicit

Sub Autofilter()
Tabelle2.Range("A5").Autofilter
Tabelle2.Range("A5").Autofilter Field:=4, Criteria1:="Tim"
Dim ws As Worksheet
Set ws = Worksheets.Add
With ws
.Name = "Tim"
End With
Tabelle2.UsedRange.SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range("A2")
End Sub

Beispiel Makro 3:

Sub anfang()
Dim ws As Worksheet
Dim wb As Workbook
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
ws.Copy
ActiveWorkbook.SaveAs Filename:=wb.Path & "\" & ws.Name
ActiveWorkbook.Close
Next
End Sub

In dem Beispiel werden die gefilterten Daten für "Paul" und "Tim" jeweils in einer separaten Datei gespeichert.
Da sich die Namen immer wieder ändern können, und es hier ca 60 verschiedene Module benötigt, welche in einem separaten Skript nacheinander ausgeführt werden, wäre es super wenn für jeden Namen eine Excel Datei entsehen würde.
Kann mir hier jemand helfen, eine Schleife oder eine Art Array zu schreiben?
Für Hilfe wäre ich sehr dankbar.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Programmierung
14.07.2022 15:09:06
Oberschlumpf
Hi Paul,
Daniels Idee ist gut!
Ich würde etwas anders vorgehen (nich, weil ich denk, meine Idee is besser als Daniels, sondern weil meine Idee spontan da war, als ich deine Beschreibung las)
1. Spalte D - mit allen - Einträgen kopieren, in eine leere Spalte einfügen, doppelte Einträge löschen
2. die nun alle nur 1x enthaltenen Werte einer Arrayvariablen zuweisen, Hilfsspalte wieder löschen
3. mit Hilfe von For/Next und den Inhalten aus dem Array deine Gesamttabelle nach Spalte D filtern
4. nur alle sichtbaren Datenzeilen kopieren und in neue Datei unter dem gefilterten Namen speichern
5. 3. + 4. so lange wiederholen, bis Array abgearbeitet ist
fertich...und all das mit nur 1 Makro! :-)
Voraussetzung:
von dir per Upload eine Bsp-Datei mit allem, was erforderlich ist, um dein Problem zu verstehen
Ciao
Thorsten
Anzeige
AW: VBA Programmierung
14.07.2022 16:10:04
snb
Warum nicht einfach sortieren ? Feld: Name.
AW: VBA Programmierung
14.07.2022 16:22:26
Oberschlumpf
weil ich das SO nich "erkannt" habe - ich denk lieber "im Beisein" einer Bsp-Datei - wenn Datei nich da, siehst ja, was da bei mir rauskommt :-)
mit Sortieren is natürlich auch ne Idee!
aber was nur meint der Fragende zu all den Ideen?
AW: VBA Programmierung
15.07.2022 09:32:49
Paul
Hallo zusammen,
vielen Dank bereits für die schnellen Antworten! Leider stehe ich immer noch etwas auf dem Schlauch (zu wenig Erfahrung mit VBA). Ich habe jetzt hier einmal eine vereinfachte Beispielsdatei gebastelt: https://www.herber.de/bbs/user/154170.xlsm
Mit dem Makro Test könnt ihr das ausführen was ich bereits im ersten Eintrag gemeint hatte. Dieses führt jedes Makro (für jeden Namen) aus und erstellt im Nachinein für alle aktiven Sheets eine Excel datei.
Ich wünsche allen bereits ein schönes Wochenende!
Anzeige
AW: VBA Programmierung
15.07.2022 09:40:26
snb
Es is nie eine gute Idee Daten in Arbeitsblätter/Files/Directories zu splitten.
Das kreiert nur Redundanz und Verwirrug.
AW: VBA Programmierung
15.07.2022 09:49:58
Paul
Hallo Snb,
danke für den Hinweis. Die Überlegung die Daten aus den einzelnen Makros zunächst in Tabellenblätter zu kopieren, und im Anschluss mit dem Makro alle aktiven Tabellenblätter in einzelne Excel Dateien zu kopieren ist bestimmt viel zu kompliziert gedacht.. Leider fehlt mir hier zur Zeit noch das Know-How und ich war glücklich, dass es so klappt wie ich es mir vorgestellt hatte.. Falls hier jemand ein konkretes Beispiel für meine Excel hat wäre ich sehr dankbar
Liebe Grüße
Paul
Anzeige
AW: VBA Programmierung
15.07.2022 09:54:36
Daniel
wie kannst du sowas behaupten, ohne die Aufgabenstellung und die Anforderungen zu kennen?
AW: VBA Programmierung
15.07.2022 09:53:03
Daniel
Hi
probier mal das Makro.
ich habs kommentiert, damit du schon beim Lesen siehst, was da in jeder Zeile gemacht wird.
solltest du das Makro mehrfach laufen lassen, müsstest du die bereits erstellen Blätter für jeden Namen löschen.

Sub Autofilter()
Dim Zelle1 As Range
Dim Zelle2 As Range
Dim ZielSheet As Worksheet
With Tabelle2
'--- Filter ausschalten, falls gesetzt. Alles anzeigen
On Error Resume Next
.ShowAllData
On Error GoTo 0
'--- nach Namen sortieren
.Cells(4, 1).CurrentRegion.Sort key1:=.Cells(4, 4), order1:=xlDescending, Header:=xlYes
'--- Schleife über jeden Namen und Zellbereich in Blatt kopieren, beginn in zeile mit Überschrift
Set Zelle2 = .Cells(4, 4)
Do
'--- erste Zelle eines Namens finden
Set Zelle1 = Zelle2.Offset(1, 0)
If Zelle1.Value = "" Then Exit Do
'--- neues Blatt für Namen anlegen und überschrift kopieren
Set ZielSheet = Sheets.Add(after:=Tabelle2)
ZielSheet.Name = Zelle1.Value
.Rows(4).Copy ZielSheet.Cells(1, 1)
'--- letzte Zelle eines Names finden
Set Zelle2 = Zelle1.EntireColumn.Find(what:=Zelle1.Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlPrevious)
'--- zellen zwischen erster und letzter Zelle ins neue Blatt kopieren
Range(Zelle1, Zelle2).EntireRow.Copy ZielSheet.Cells(2, 1)
Loop
End With
End Sub
Gruß Daniel
Anzeige
AW: VBA Programmierung
15.07.2022 10:14:31
Paul
Hallo Daniel,
vielen herzlichen Dank! Das sieht wirklich schon fast perfekt aus. Leider kommt es bei einigen Namen dazu, dass Sie die maximale Länge überschreiten und einen Titel wie Dr. oder ähnliches im Namen haben... Daraus resultiert im Nachgang das Problem, dass keine fehlerfreie Datei genertiert werden kann, und man im Nachgang diese Punkte aus dem Dateinamen entfernen müsste.
Kann man folgende Zeile so anpassen, dass die Namen ohne Punkt und eventuell maximal 30 Zeichen als Tabellenblattnamen gespeichert werden können? Ich hoffe ich schreibe nicht zur wirr.
ZielSheet.Name = Zelle1.Value
Fehler: Laufzeitfehler 1004:
Der eingegebene Name für ein Blatt oder Diagramm ist ungütlig. Stellen Sie Folgendes Sicher:
Der eingebene Name weist maximal 31 Zeichen auf.
Der Name enthält keines der Folgenden Zeichen : / ? *
Es wurde ein Name eingegeben.
Anzeige
AW: VBA Programmierung
15.07.2022 10:37:56
Daniel
naja, was hindert dich daran, das entsprechend in deinen Code einzufügen?
um einen Text auf eine bestimmte Länge einzukürzen kann man die Funktion LEFT verwenden und unerwünschte Zeichen kann man mit Replace austauschen, also bespielsweise

.Name = Replace(Replace(Left(Zelle1.value, 31), "?", " "), "."; " ")
weitere Replaces kannst du bei Bedarf hinzunehmen.
Gruß Daniel
AW: VBA Programmierung
18.07.2022 07:23:47
Paul
Hallo Daniel,
es klappt alles wie ich es mir gewünscht habe!
Tausend Dank! Und einen guten Start in die Woche.
Lg Paul

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige