Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1232to1236
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

Datenaufbereitung

Datenaufbereitung
Bibo
Liebe EXCEL-Freunde und VBA-Könner,
die in der beigefügten Datei im Arbeitsblatt „1“ beinhalteten, im Original vom Lieferanten so auch bereitgestellten Produktinformationen sollen so aufbereitet werden, dass sie wie im Arbeitsblatt „Output“ beispielhaft dargestellt in dieser Form zur weiteren Ver-/Bearbeitung verwendet werden können. Die farbliche Abgrenzung dient hierbei lediglich der Übersichtlichkeit.
https://www.herber.de/bbs/user/77227.xls
Dies konnte ich bislang mit einer kombinierten Formel-/VBA-Lösung realisieren, die im Arbeitsblatt „1“ in einer zusätzlich eingefügten Spalte A die Zuordnung der als linker Teil der als „Überschrift“ bereitgestellten Palettennummer ( z.B. „2011090320003 185W“) zu den jeweiligen Seriennummern vorgenommen und dann mit einem aufgezeichneten Makro die ergänzten Daten in das Arbeitsblatt „Output“ übernommen/kopiert, aufsteigend nach Palettennummern sortiert und die nicht benötigten leeren Zeilen sowie die mit Inhalten wie „2011090320007 185W„ und „SerialNo
Date Pmax Voc Isc Vpm Ipm“ gelöscht hat.
Dies hat auch gut funktioniert, da die mit dem Arbeitsblatt „1“ gelieferten Daten einheitlich strukturiert waren, d.h. die Produktanzahl (= SerialNo) je Palette (= z.B. „2011090320007 185W“) bislang immer einheitlich 25, 22 oder 21 usw. war.
Dies hat sich jedoch nunmehr geändert, da jetzt Paletten mit unterschiedlicher Anzahl von Produkten geliefert werden, in der Beispieldatei sind dies 22 und 26 Module je Palette.
Meine Lösung funktioniert nun nicht mehr und ich bekomme das Problem weder hinsichtlich des Formel- noch des VBA-Anteils in den Griff.
Ich vermute, dass der VBA-Lösungsansatz über eine Schleife realisierbar sein müsste, die vielleicht vom Ende her beginnend den variabel benötigten Bereich (zwischen den Leerzeilen) ermittelt und dann über „offset(-1,1)“ die Palettennummer als „value“ einträgt.
Zur Umsetzung bin ich mit meinen sehr beschränkten VBA-Kenntnissen leider nicht in der Lage, d.h. ich weiß nicht, welche Werte ich den Variablen zuweisen muss usw.
Könnt ihr mir bitte dabei helfen?
Mit freundlichen Grüssen
Bibo

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datenaufbereitung
28.10.2011 18:09:03
bibo
Hallo Marc,
habe gerade gesehen, dass mir doch noch jemand helfen will. Ganz herzlichen Dank dafür und ganz besonders, weil Du tatsächlich der Einzige bist.
Habe ganz kurz mal angetestet, prinzipiell entspricht das Ergebnis durchaus den Erwartungen. Allerdings wird die ursprüngliche Spalte A des Tabellenblatts „1“ verschluckt, d.h. nicht mit übertragen.
Wenn ich Deinen Ansatz richtig verstanden habe, orientierst Du Dich strukturell an der/den verbundenen Zellen. Tolle Idee, auf die ich so jetzt nicht gekommen wäre. Die Länge des Strings lässt sich doch bestimmt über Left ... oder „Teil“ oder so auf die ersten 13 Zeichen, also die „nackte“ Palettennummer begrenzen. Schön wäre auch, wenn alles im Tabellenblatt „Output“ dann gleichmäßig mit Arial 12 formatiert wäre. Müsste doch irgendwie über „font“ oder so vorzugeben sein.
Das Makro lässt sich m.E. nur im Tabellenblatt „1“ oder direkt im VBA-Editor erfolgreich aktivieren, obwohl es doch in einem Modul beinhaltet ist. Woran liegt das denn?
Ich befinde mich noch ganz am Anfang meines VBA-Einstieges und lese derzeit eigentlich noch mehr ohne eigenen Code zu schreiben. In der Literatur wird eigentlich immer empfohlen, „Option explicit“ zu verwenden, damit man gezwungen ist, alle Variablen zu deklarieren und dadurch bei einer evtl. Fehlersuche im Vorteil sein soll. Das ist bei Dir jetzt glaube ich nicht so; was begründet Deine Vorgehensweise bzw. welche Vorteile siehst Du hier?
Ich möchte mich morgen mal mit dem Code näher befassen, um ihn dann vielleicht auch in hoffentlich größerem Umfang verstehen zu können. Wenn es Dir recht ist, würde ich mich bei Fragen erneut im Forum über die „Unerledigt“-Markierung wieder melden.
Einstweilen nochmals vielen Dank und einen schönen Abend.
Mit freundlichem Gruß
Peter (Bibo)
Anzeige
AW: Datenaufbereitung
31.10.2011 08:02:35
Marc
Guten Morgen.
Die Tabelle hab ich an Deine Bedürfnisse angepasst. 'Außerdem hab ich zu jeder Zeile einen Kommentar geschrieben, was das zu bedeuten hat.

Die Länge des Strings lässt sich doch bestimmt über Left ... oder „Teil“ oder so auf die ersten 13 Zeichen, also die „nackte“ Palettennummer begrenzen.

Das hab ich mit SPLIT gelöst. Wenn dir das nicht passt, dann nimm die nächste Zeile, da ist es mit left gelöst.

Das Makro lässt sich m.E. nur im Tabellenblatt „1“ oder direkt im VBA-Editor erfolgreich  _
aktivieren, obwohl es doch in einem Modul beinhaltet ist. Woran liegt das denn?

Im Code wird nur teilweise das Tabellenblatt mit angesprochen. Es ist dann nur von Range die Rede und bezieht sich damit auf das aktuell gewählte Blatt. Wenn du im 2. Blatt bist und als letzte Zeile die Zeile 1 ermittelt wird, dann ist der Code schnell abgearbeitet und die Daten kopiert :-). Ich habs aber mal ausführlich hingeschrieben. Nicht schön, nur ausführlich.
„Option explicit" ist an sich auch der korrekte Weg. Ich mach´s nicht, weil ich faul bin. Ich hab mir VBA auch selbst beigebracht bin daher auch Programmtechnisch sicher nicht die grosse Leuchte. Gewöhn es dir an. Mir hätte es tatsächlich schon so manche Suche erspart, die nur im Schreibfehler einer Variablen endete...
Hier noch einige "Vorschläge" und Tips:
Du mußt nicht von Anfang an die Syntax "schreiben". Zeichne dir die Makros auf und betrachte, was du getan hast. Damit hättest du beispielsweise das mit der Schriftart und größe selbst gelöst.
Wichtig!: Beende die Aufzeichnung irgendwann, sonst baust du dir ne Endlosschleife.
Wenn du einen Begriff nicht verstehst, hiflt die oft die Hilfe weiter. schnellster Weg: Begriff markieren, F1 drücken.

würde ich mich bei Fragen erneut im Forum über die „Unerledigt“-Markierung wieder melden.

Ich finde es passender, gezielte Fragen via "@Marc" zu posten. Zum einen schau ich nicht immer nach den uralten Beiträgen, zum haben dann auch andere Forumsmitglieder die Chance zu lernen und (Dein Vorteil) zu posten.
Da im Moment durch einen "internal Error" das File-Upload nicht funktioniert, hier der Code als Text:
Gruß, Marc
Sub aufbereiten()
Sheets("output").Cells.Clear 'alles im Tab "output" löschen
lz = Sheets("1").Cells(Rows.Count, "A").End(xlUp).Row 'letzte Zeile finden
farb = 39 'erste Farbe festlegen
einfüg = 1 'erste einzufügende Zeile festlegen
For i = 3 To lz
If Sheets("1").Cells(i, 1).MergeCells Then 'wenn Zellen verbunden, dann
kopf = Split(Sheets("1").Cells(i, 1).Value) 'String wird bei leerzeichen getrennt, Ergebnis = Array, Rückgabe mit Kopf(0), bzw Kopf(1)
'kopf = Left(Sheets("1").Cells(i, 1).Value, 1, 13)
farb = IIf(farb = 39, 36, 39) 'Farbwechsel bei jeder Überschrift
End If
If IsDate(Sheets("1").Cells(i, 2)) Then 'wenn datum dann....
endlist = Sheets("1").Cells(i, 2).End(xlDown).Row 'letzte Zeil des Blocks ermitteln
With Sheets("output")
.Range("A" & einfüg) = kopf(0) 'Kopf einfügen
Sheets("1").Range("A" & i & ":G" & endlist).Copy .Range("B" & einfüg) 'Block kopieren
.Range("A" & einfüg & ":A" & .Range("B1").End(xlDown).Row) = kopf 'Kopf ein 1. Spalte füllen
.Range("A" & einfüg & ":H" & .Range("B1").End(xlDown).Row).Interior.ColorIndex = farb 'Färben
einfüg = .Range("B1").End(xlDown).Row + 1 'Zeile hochzählen
End With
i = endlist ' i hochsetzen
End If
Next i
With Sheets("output").Cells.Font 'mit "font" änderst du ...
.Name = "Arial" 'den namen auf Arial
.Size = 12 'die Größe auf 12
End With
End Sub
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige