mahoaga
Goto Top

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

Content-Key: 495927

Url: https://administrator.de/contentid/495927

Printed on: April 24, 2024 at 01:04 o'clock

Mitglied: 140913
140913 Sep 18, 2019 updated at 15:28:04 (UTC)
Goto Top
Würde ich gleich mit Powershell machen (effizienter):
(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
Member: erikro
erikro Sep 18, 2019 at 15:26:08 (UTC)
Goto Top
Moin,

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
Mitglied: 140913
140913 Sep 18, 2019 updated at 15:29:00 (UTC)
Goto Top
Zwei D... ein Gedanke face-big-smile.
Member: erikro
erikro Sep 18, 2019 at 15:31:34 (UTC)
Goto Top
Zitat von @140913:

Zwei D... ein Gedanke face-big-smile.

Jupp, Du warst nur zehn Sekunden schneller. face-wink Deine Lösung fand ich auch interessant.
Mitglied: 140913
140913 Sep 20, 2019 updated at 08:25:29 (UTC)
Goto Top
Wenn hier nichts mehr an Rückmeldung vom TO kommt bitte Thread dicht machen nicht vergessen!
Member: mahoaga
mahoaga Sep 20, 2019 at 12:21:32 (UTC)
Goto Top
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? : )
Member: mahoaga
mahoaga Sep 20, 2019 updated at 12:25:49 (UTC)
Goto Top
Sehr nett, danke euch beiden! = ) Habe unten nochmal was dazu geschrieben.
Member: erikro
erikro Sep 20, 2019 at 12:30:14 (UTC)
Goto Top
Moin,

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? : )

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. face-wink

Liebe Grüße

Erik
Member: mahoaga
mahoaga Sep 24, 2019 at 11:59:06 (UTC)
Goto Top
Da die Nummern 15 stellige "Sendungsnummern" sind, werden diese zu 99,9% nicht doppelt vorkommen. Falls doch, wird es noch eine sehr lange Zeit dauern : ) Bis dahin wird mein VBA Code nicht mehr von Gebrauch sein.

kurzes Update:
Ich habe es mit einigen Code Schnipseln geschafft, dass das Makro die CSV Dateien einzelnd als getrennte Blätter in einer Excel Datei öffnet. Jedoch fiel mir sofort auf, dass die Umlaute zerschossen wurden. Zur Info: Die ursprünglichen CSV Dateien waren in der Codierung UTF-8 mit semikolon getrennt. Aber sobald diese durch das Makro importiert werden, werden die Umlaute nicht korrekt dargestellt.

Mit was für einer Funktion bzw. Code, könnte ich die Codierung übernehmen? Es könnte auch einfach nur eine Copy&Paste Funktion sein, die den Inhalt übernimmt...

Vielen Dank euch im Voraus! : )