Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1588to1592
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

Importierte Daten optimieren

Importierte Daten optimieren
11.11.2017 23:23:34
Frank
Hallo an die Excel-Spezialisten,
ich habe eine größere Menge an Daten, die ich wiederholt aus einer CSV-Datei importieren und aufbereiten muss. Einen Teil davon kann ich problemlos per VBA abdecken, für den ersten Teil nach dem Import würde ich gerne einen Vorschlag von Euch bekommen. Folgende Schritte sind notwendig:
1) Zunächst muss eine neue leere Spalte in A eingefügt werden, die anderen rutschen eine Spalte nach rechts.
2) Die Tabelle enthält in Spalte B in den ungeraden Zeilen ab 1 einen Text von dem ich die ersten Zeichen benötige. Die Menge ist unterschiedlich, das einzige fixe Kriterium ist das Wort "Add". Alles davor wird benötigt.
3) Der in Schritt 2) abgegriffene Text muss in die neue leere Spalte A geschrieben werden, allerdings jeweils eine Zeile tiefer als die Quellzelle.
4) Alle ungeraden Zeilen ab 1 (sie haben nur in Spalte B einen Inhalt) müssen gelöscht werden.
Die Menge an Zeilen ist jeweils unterschiedlich, vor der Schleife muss also die Anzahl der belegten Zeilen ermittelt werden.
Ich habe eine Tabelle mit einigen Beispiel-Datensätzen hochgeladen. Darin gibt es zwei Register, eines mit den Rohdaten nach dem Import und eines, wie es nach dem Durchlauf der VBA-Routine aussehen soll. Die Menge an Spalten ist noch deutlich umfangreicher, aber deren Aufbereitung bekomme ich hin:
https://www.herber.de/bbs/user/117617.xlsx
Vielen Dank für Euren Lösungsansatz!
Viele Grüße
Frank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Importierte Daten optimieren
12.11.2017 00:02:25
CitizenX
Hi,
Code in ein allgemeines Modul:
Option Explicit
Option Base 1
Sub import()
Dim i As Long, n As Long, allRows As Long, arr() As Variant
Dim lastRow As Long
With Worksheets("Summary Import")
allRows = .UsedRange.Rows.Count
ReDim arr(allRows / 2, 3)
For i = 1 To allRows Step 2
n = n + 1
arr(n, 1) = Split(.Cells(i, 1), "Add")(0)
arr(n, 2) = .Cells(i + 1, 1)
arr(n, 3) = .Cells(i + 1, 2)
Next
End With
With Worksheets("Summary ready")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(lastRow, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Sub
VG
Steffen
Anzeige
AW: Importierte Daten optimieren
12.11.2017 01:09:30
Frank
Hi Steffen,
vielen Dank für die schnelle Antwort. Es funktioniert.
Das mit den beiden Registern hatte ich allerdings nur zur Verdeutlichung angelegt, weil ich Vorher und Nachher zeigen wollte, damit nicht durch rein textliche Beschreibung im Post etwas missverstanden wird. Tatsächlich soll das Ergebnis im gleichen Blatt wie das importierte Rohmaterial stehen.
Grundsätzlich spielt es aber keine Rolle, weil ich die Daten von dort anschließend ohnehin in ein Sammelblatt kopiere. In meinem Originalblatt sind allerdings die Spalten bis AD gefüllt. Ich hatte es der Übersichtlichkeit auf zwei Spalten gekürzt, weil nach meiner Vorstellung ja nur in den ersten was getan werden sollte und der Rest unverändert bleibt.
Wenn man die Daten in ein neues Blatt kopiert, muss das Array entsprechend größer sein, um alle Daten zu greifen. Ich habe es also angepasst und eine Zeile "arr(n, 4) = .Cells(i + 1, 3)" hinzugefügt. Das funktioniert, macht das Script aber ziemlich lang, wenn ich alle Spalten auf diese Art und Weise aufnehmen will.
Vielleicht hast Du ja noch eine effektivere Idee, wie man es mit weniger Code-Zeilen hinbekommt? Ganz flexibel wäre es, wenn die Anzahl der belegten Spalten zuvor ermittelt und automatisch alle berücksichtigt werden. Ich kann aber bei Änderungen der Tabellenbreite auch fix eine Stelle im Code anpassen, wenn das ansonsten unnötig kompliziert wird.
Viele Grüße
Frank
Anzeige
AW: Importierte Daten optimieren
12.11.2017 01:22:21
CitizenX
Hi Frank,
ist doch kein Problem,halt noch 'ne Schleife drüber:
Option Explicit
Option Base 1
Sub import()
Dim i As Long, n As Long, c As Long, allRows As Long, allCol As Long, arr() As Variant
Dim lastRow As Long
With Worksheets("Summary Import")
allRows = .UsedRange.Rows.Count
allCol = .UsedRange.Columns.Count
ReDim arr(allRows / 2, allCol)
For i = 1 To allRows Step 2
n = n + 1
arr(n, 1) = Split(.Cells(i, 1), "Add")(0)
For c = 2 To allCol
arr(n, c) = .Cells(i + 1, c - 1)
Next
Next
End With
With Worksheets("Summary ready")
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(lastRow, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End With
End Sub
Du kannst ja auch die Daten vom Array wieder in deine Datenimport Tabelle zurückschreiben..
Vg
Steffen
Anzeige
AW: Importierte Daten optimieren
12.11.2017 01:52:58
Frank
Hi Steffen,
ja, das sieht angenehmer aus als mit 30 Zeilen, um das Arry zu füllen - danke!
Bleibt noch die Frage, welcher Parameter derzeit dafür sorgt, dass es im Zielblatt in B3 beginnt, statt in A1, wo es eigentlich hingehört. Da muss ich wohl bei Cells statt mit 1 mit einem negativen Wert arbeiten.
Ich habe jetzt aber auf die Schnelle einfach die überflüssigen Zeilen und die Spalte A gelöscht. Geht auch. Dann musste ich noch die Formatierung für Prozentzahlen für verschiedene Spalten einfügen, weil die beim Kopieren verloren geht und dann 0,xxx drin steht. Beides natürlich im VBA-Code. Hat auch funktioniert.
Ist schon super mit einer solchen Automatisierung. Statt 10 min ist es wenigen Sekunden fertig.
Viele Grüße
Frank
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige