Excel - Nummer Suchen in CSV und ganze Zeile in neue Datei kopieren
Hallo liebes Team,
ich bräuchte eure Hilfe zu folgendem Problem:
Ich habe eine Excel Datei in einem ORDNER1 und mehrere CSV Dateien in einem ORDNER2
1. Der ORDNER1 beinhaltet eine Liste1 mit einer einzigen Spalte A mit mehreren Zeilen. Nennen wir die Spalte A mal "NUMMER" In den einzelnen Zeilen dieser Spalte stehen immer 15 stellige Zahlen.
Beispiel: 102265565727031
102265563481575
....
2. Der ORDNER2 beinhaltet mehrere CSV Listen, die sich alle ähneln. Beispiel von einer dieser Listen: Eine Liste2 mit 15-20 Spalten. Eine Spalte von diesen heißt auch "NUMMER" und diese Spalte beinhaltet ebenso Zeilen mit verschiedenen 15 stelligen Nummern.
Mein Ziel ist es jetzt, dass das Makro in der ORDNER1/Liste1 reinschaut, die 15 stellige Nummer nimmt und genau diese Nummer im ORDNER2 in den verschiedenen CSV Listen sucht. Sobald er diese Nummer gefunden hat, soll er von der jeweiligen CSV Liste genau diese Zeile, in der die Nummer auftaucht (die Spalten A-D (Beispiel)) in die Liste1 in Spalte B-E rein kopieren.
Dieser Vorgang soll sich für alle Nummern der Liste1 wiederholen.
Ich bin leider kein VBA Profi, Grundverständnis ist vorhanden. Ich wäre für jede Hilfe sehr dankbar.
Liebe Grüße
ich bräuchte eure Hilfe zu folgendem Problem:
Ich habe eine Excel Datei in einem ORDNER1 und mehrere CSV Dateien in einem ORDNER2
1. Der ORDNER1 beinhaltet eine Liste1 mit einer einzigen Spalte A mit mehreren Zeilen. Nennen wir die Spalte A mal "NUMMER" In den einzelnen Zeilen dieser Spalte stehen immer 15 stellige Zahlen.
Beispiel: 102265565727031
102265563481575
....
2. Der ORDNER2 beinhaltet mehrere CSV Listen, die sich alle ähneln. Beispiel von einer dieser Listen: Eine Liste2 mit 15-20 Spalten. Eine Spalte von diesen heißt auch "NUMMER" und diese Spalte beinhaltet ebenso Zeilen mit verschiedenen 15 stelligen Nummern.
Mein Ziel ist es jetzt, dass das Makro in der ORDNER1/Liste1 reinschaut, die 15 stellige Nummer nimmt und genau diese Nummer im ORDNER2 in den verschiedenen CSV Listen sucht. Sobald er diese Nummer gefunden hat, soll er von der jeweiligen CSV Liste genau diese Zeile, in der die Nummer auftaucht (die Spalten A-D (Beispiel)) in die Liste1 in Spalte B-E rein kopieren.
Dieser Vorgang soll sich für alle Nummern der Liste1 wiederholen.
Ich bin leider kein VBA Profi, Grundverständnis ist vorhanden. Ich wäre für jede Hilfe sehr dankbar.
Liebe Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 495927
Url: https://administrator.de/contentid/495927
Ausgedruckt am: 24.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
Würde ich gleich mit Powershell machen (effizienter):
(Variablen im Kopf anpassen, Delimiter nehme ich für die CSV mal das ";" (Semikolon an))
p.s. wenns unbedingt VBA sein muss, hier noch für dich gefunden
Excel 2013 Suche nach einem Wert in mehreren Excel-Dateien und Ausgabe weiterer Werte zum Suchergebnis incl. Angabe der Quelldatei mittel Makro
(Variablen im Kopf anpassen, Delimiter nehme ich für die CSV mal das ";" (Semikolon an))
# ##################################
# Datei mit den Nummern
$file = 'D:\folder1\quelle.csv'
# Ordner mit den CSV-Dateien
$csvfolder = D:\folder2'
# Name der Spalte in denen die Nummer steht
$search_column = "NUMMER"
# Array aus Spaltennamen aus den CSV-Dateien die in die Ursprungsdatei kopiert werden sollen
$copy_columns = @("SpalteABC","SpalteXYZ")
# ##################################
$items = Import-CSV $file -Delimiter ";"
$data = Get-ChildItem $csvfolder -Filter *.csv -File | %{Import-Csv $_.Fullname -Delimiter ";"}
$copy_columns | %{$items | Add-Member -MemberType NoteProperty -Name $_ -Value "" -Force}
foreach($item in $items){
$result = $data | ?{$_.$search_column -eq $item.$search_column}
if ($result){
$copy_columns | %{$item.$_ = $result.$_}
}
}
$items | export-csv $file -Delimiter ";" -NoTypeInformation -Encoding UTF8
p.s. wenns unbedingt VBA sein muss, hier noch für dich gefunden
Excel 2013 Suche nach einem Wert in mehreren Excel-Dateien und Ausgabe weiterer Werte zum Suchergebnis incl. Angabe der Quelldatei mittel Makro
Moin,
das würde ich nicht mit Excel, sondern der Powershell realisieren (ungetestet):
Die Spalte in der Liste muss Nummer heißen und die in den Quelldateien ebenso. Wenn nicht, dann entsprechend anpassen.
Wie gesagt, das ist ungetestet. Dazu habe ich jetzt keine Lust mehr. Wenn es nicht klappt, dann bitte mit Fehlermeldung Bescheid geben.
hth
Erik
das würde ich nicht mit Excel, sondern der Powershell realisieren (ungetestet):
PARAM (
$liste = "liste.csv", # Pfad auf die Liste der Nummern
$ordner = "c:\woauchimmer", # Pfad auf den Ordner mit den CSVs
$target = "neue_liste.csv", # Ich würde das nicht ins Original schreiben
$delimiter = ";", # Das Trennzeichen der CSVs (hoffentlich immer gleich)
$encoding = "utf8" # Encoding der Files (hoffentlich immer gleich)
)
$numbers = Import-Csv $liste -delimiter $delimiter -encoding $encoding
$files = Get-ChildItem $ordner *.csv
foreach($number in $numbers) {
foreach($file in $files) {
# Kommt die Nummer in verschiedenen Files vor, dann wird die Zeile aus jeder Datei eingetragen!
$dataset = (Import-Csv $file -Delimiter $delimiter -Encoding $encoding | Where-Object {$file.nummer -eq $number.nummer})
$dataset | Export-Csv $target -Delimiter $delimiter -Encoding $encoding -NoTypeInformation -Force
}
}
Die Spalte in der Liste muss Nummer heißen und die in den Quelldateien ebenso. Wenn nicht, dann entsprechend anpassen.
Wie gesagt, das ist ungetestet. Dazu habe ich jetzt keine Lust mehr. Wenn es nicht klappt, dann bitte mit Fehlermeldung Bescheid geben.
hth
Erik
Zwei D... ein Gedanke .
Wenn hier nichts mehr an Rückmeldung vom TO kommt bitte Thread dicht machen nicht vergessen!
Moin,
Und was passiert, wenn eine Nummer in zwei Tabellen vorkommt? Was passiert, wenn eine Nummer in einem Blatt doppelt vorkommt? Was passiert, wenn beides der Fall ist? Nach Deinem Ansatz gewinnt dann der letzte Eintrag. Das ist höchstwahrscheinlich nicht gewollt. Deshalb auch der Ansatz, das Ganze in ein neues CSV zu schreiben, in dem dann in den Fehlerfällen alle Datensätze vorhanden sind und händisch nachgearbeitet werden kann.
Und sag jetzt nicht, dass das nicht vorkommt. Es wird in der Praxis vorkommen.
Liebe Grüße
Erik
Zitat von @mahoaga:
Vielen lieben Dank für eure Antworten. Ich habe leider garkeine Kenntnisse bezüglich PowerShell... Dennoch habe ich eure beiden Quellcodes mal in PowerShell laufen lassen, bekam jedoch einige Fehlermeldungen. Ich versuch es weiterhin mit VBA.
Wäre folgende Vorgehensweise ok?:
Das Makro ließt alle CSV Dateien getrennt als verschiedene Tabellenblätter in eine einzige Datei ein. Zusätzlich befindet sich in der selben Mappe ein Blatt mit den ganzen Nummern in einer einzigen Spalte.
Daraufhin wird durch eine Funktion jede einzelne Nummer in den verschiedenen Blättern gesucht, sobald es gefunden wurde wird die jeweilige Zeile kopiert und NEBEN die Nummer eingefügt. Ist dies logisch? : )
Vielen lieben Dank für eure Antworten. Ich habe leider garkeine Kenntnisse bezüglich PowerShell... Dennoch habe ich eure beiden Quellcodes mal in PowerShell laufen lassen, bekam jedoch einige Fehlermeldungen. Ich versuch es weiterhin mit VBA.
Wäre folgende Vorgehensweise ok?:
Das Makro ließt alle CSV Dateien getrennt als verschiedene Tabellenblätter in eine einzige Datei ein. Zusätzlich befindet sich in der selben Mappe ein Blatt mit den ganzen Nummern in einer einzigen Spalte.
Daraufhin wird durch eine Funktion jede einzelne Nummer in den verschiedenen Blättern gesucht, sobald es gefunden wurde wird die jeweilige Zeile kopiert und NEBEN die Nummer eingefügt. Ist dies logisch? : )
Und was passiert, wenn eine Nummer in zwei Tabellen vorkommt? Was passiert, wenn eine Nummer in einem Blatt doppelt vorkommt? Was passiert, wenn beides der Fall ist? Nach Deinem Ansatz gewinnt dann der letzte Eintrag. Das ist höchstwahrscheinlich nicht gewollt. Deshalb auch der Ansatz, das Ganze in ein neues CSV zu schreiben, in dem dann in den Fehlerfällen alle Datensätze vorhanden sind und händisch nachgearbeitet werden kann.
Und sag jetzt nicht, dass das nicht vorkommt. Es wird in der Praxis vorkommen.
Liebe Grüße
Erik