Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

verschiedene Werte automatisch markieren

verschiedene Werte automatisch markieren
09.09.2022 19:31:13
Jens
Hallo zusammen,
ich möchte aus einer Tabelle automatisch alle Zeilen, die dieselbe Kundennummer haben, in ein jeweils neues Arbeitsblatt kopieren, um Lieferlisten zu erstellen.
Die Tabelle enthält Kundennummern, Namen, Adressen, Artikel, Mengen usw...
In der Tabelle gibt es etwa 3000 Einträge, wobei die Kundennummern das ausschlaggebende Argument sind. Die Tabelle nach den Kundennummern sortieren zu lassen, ist kein Problem. Auch die Erzeugung eines neuen Arbeitsblattes ist nicht schwer.
Mein Problem ist, dass ich es nicht schaffe, die Zeilen, in denen die Kundennummern stehen, automatisch als Auswahlkriterium für die Kopie zu verwenden. Als Mensch erkenne ich natürlich sofort, dass ich die einzelnen Blöcke markieren und kopieren muss. Aber wie bringe ich das in ordentlichen Code?
Idealerweise möchte ich auch nicht die gesamte Zeile, sondern nur vorgegebene Positionen kopieren (z.B. Artikel, Menge, Lieferdatum).
Das Kopieren an sich bekomme ich wahrscheinlich mit Arrays hin aber die automatische Auswahl fällt mir schwer. Momentan lasse ich die Tabelle nach Kundennummern sortieren und an den Stellen, wo sich die Nummern ändern, eine Leerzeile einfügen. Die so entstandenen Blöcke kann ich aber nicht sinnvoll abarbeiten. Ich dachte, mit einer Sortierung wäre ich schon einen Schritt weiter, scheinbar bin ich das aber nicht. Es geht mir darum, dass ich aus der Tabelle auf Knopfdruck die neuen Arbeitsblätter erzeuge, ohne jede Kundennummer einzeln einzugeben, weil das leicht mehrere Hundert sein können.
Kann mir da bitte jemand einen Schubs in die richtige Richtung geben?
Vielen Dank für etwaige Hilfe.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: verschiedene Werte automatisch markieren
09.09.2022 19:46:45
Jens
Vielen Dank für den Hinweis neopa C,
ich würde das gerne mit VBA lösen, weil ich da auch wieder ein Stück besser werden möchte. Das Einlesen der Daten stellt kein Problem dar, ich lese über eine Userform unterschiedliche csv Dateien ein. Ich möchte jetzt eben die Daten strukturiert in neue Arbeitsblätter (Am Ende tatsächlich als Lieferscheine in PDF) aufteilen. Ich dachte, an einem real existierenden Problem VBA zu trainieren, macht mehr Spaß, als stumpf irgendwas nachzubauen.
Anzeige
AW: verschiedene Werte automatisch markieren
09.09.2022 19:53:33
Fennek
Hallo,
mit einer Pivot-Tabellen lassen sich zumindest die meisten Schritte lösen. Wenn es nicht klappt, lade eine Beispiel-Datei mit ca 5 Kundennummern und jeweils 3-5 Fälle pro Kunde hoch.
mfg
AW: verschiedene Werte automatisch markieren
09.09.2022 20:01:22
Daniel
Hi
wenn die Liste nach Kundennummer sortiert ist (was du ja auch einfach im Code machen kannst) geht die Abarbeitung aller Kundennummern am schnellsten so, hier für Kundennummer in Spalte A und Daten ab Zeile 2 (Zeile 1 = Überschrift)

dim Zelle1 as range, Zelle2 as range
set Zelle2 = Range("A1")
Do
Set Zelle1 = Zelle2.Offset(1, 0)
if Zelle1.value = "" then Exit do
Set Zelle2 = Zelle1.EntireColumn.find(what:=Zelle1.value, lookat:=xlwhole, Searchdirection:=xlprevious)
'--- hier fügst du dann deine Bearbeitung ein  Zelle1 ist die erste Zelle des Blocks und  Zelle2 die letzte Zelle des Blocks.
'--- die dazwischenliegenden Zellen kannst du dann in ein neues Blatt kopieren
Loop
wenn du die Liste mit Leerzeilen zwischendrin hast, dann geht das beispielsweise so:

dim Block as Range
for each Block in Column(1).SpecialCells(xlcelltypeconstants, 3).Areas
'--- block ist dann der Zellbereich zwischen zwei Leerzeilen, den du kopieren kannst
Next
Gruß Daniel
Anzeige
AW: verschiedene Werte automatisch markieren
09.09.2022 20:39:19
Jens
Hallo Daniel,
vielen Dank. Ich glaube, damit kann ich was anfangen. Der Hinweis auf eine Area klingt nach einer interessanten Möglichkeit. Das werde ich mir ansehen.
Herzlichen Dank und einen Gruß zurück
Jens
AW: verschiedene Werte automatisch markieren
09.09.2022 22:26:18
Jens
Danke Daniel,
der Schubs hat gewirkt, Areas sind gar keine schlechte Sache. Jetzt muss ich nur noch die einzelnen Einträge in einem Block ansprechen. Aber das wird schon.
:)
AW: verschiedene Werte automatisch markieren
09.09.2022 22:41:29
Daniel
Block(1, 1) ist die obere linke Zelle eines Blocks
Block(Block.rows.count, Block.Columns.Count) ist die untere Rechte Zelle des Blocks.
Gruß Daniel
dann schubsen wir weiter...
09.09.2022 23:07:49
Yal
Hallo Jens,
versuche folgendes (man geht davon aus, dass die Kundennummer in Spalte A von der Tabelle "Quelle" ab Zelle A2 vorliegen):

Sub KopiereiSinnvollOderNicht()
Dim Z As Range 'Z wie Zelle
Dim Ws As Worksheet
With Worksheets("Tabelle1")
For Each Z In Range(.Range("A1"), Cells(Rows.Count, 1).End(xlUp))
Set Ws = SelectOrCreate(Z.Value)
Set Z = Intersect(Z.EntireRow, .UsedRange) 'Da sollte die Quelltabelle ab A1 befüllt sein!
Ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, Z.Cells.Count) = Z.Value
Next
End With
End Sub
Private Function SelectOrCreate(WsName As String) As Worksheet
Dim W As Worksheet
On Error Resume Next
With ThisWorkbook
Set W = .Worksheets(WsName)
If W Is Nothing Then
Set W = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))
W.Name = WsName
End If
End With
Set SelectOrCreate = W
End Function
Ungetestet, weil ich deine Datei nicht nachbauen möchte (Code enthält üblicherweise viele Vertipper).
VBA mag gut sein, aber in dem Fall ist es eine reine Datenbehandlung und daher bestens mit Power Query zu handeln.
Pivot eher nicht: wir brauchen hier keine Summen oder sonstige Aggregationen.
Ca. 20 Jahre VBA und nur 2 Jahre PQ, mache aber inzwischen PQ überall, wo ich VBA vermeiden kann.
VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige