Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Excel VBA Makro Sammeltabelle erstellen

Mitglied: Rio1980

Rio1980 (Level 1) - Jetzt verbinden

01.09.2011 um 17:07 Uhr, 6518 Aufrufe, 14 Kommentare

Hallo zusammen,

ich stehe vor einem für meine Begriffe hochkomplexen Makroproblem. Das Makro soll Daten aus unzähligen txt-Dateien importieren, daraus eine Sammeltabelle erstellen und nach bestimmten Suchkriterien aus dieser erstellen Sammeltabelle Übereinstimmungen in 3 anderen Dateien suchen, um aus diesen weitere Daten in die erstellte Sammeltabelle (natürlich an die richtigen Positionen) zu kopieren.

In einem Ordner "Textdateien" auf der C: Platte befinden sich unzählige Unterordner wobei sich in jedem dieser Ordner unter anderem auch eine txt-Datei befindet. All dieser txt-Dateien ähneln sich im Aufbau, sodass nach dem importieren (als Spaltentrennung soll ein : gelten) einer txt-Datei in Excel (2003) die Zellen A1 - B25 mit Daten gefüllt sind. Ich benötige dann die Daten aus den Zellen B1, B2, B4, B5, B6, B7 und B11 welche in meine Sammeltabelle in die Spalten A-G (für jede txt-Datei eine Zeile, sind im mom ca 100 Unterordner und somit 100 txt-Dateien und werden immer mehr) übernommen werden sollen. Wenn all diese Daten in die nun neu entstandene Sammeltabelle aufgenommen sind, müssten sich in der Spalte B nun Teilernummern befinden. Nach diesen Teilernummern müsste das Makro nun in 3 weiteren im sich im Aufbau ähnlichen Dateien, (z. Bsp.: "Datei1","Datei2","Datei3") wobei sich die Teilenummer immer in der Spalte A befindet, suchen und bei einem Treffer die Daten aus den Zellen B - H der entsprechenden Datei und Trefferzeile in meine Sammeltabelle in die Spalten H - N in die entsprechende Zeile kopieren.

Ich hoffe ich konnte das Problem bzw die Anforderung an das Makro anschaulich genug schildern...ist nicht immer so leicht ohne Anschauungsmaterial.
Die Frage für mich ist, ob das per Makro überhaupt lösbar ist und ob es sich alles in einem einzigen Makro verwirklichen lässt, oder ob man das in 2 Makros verpacken müsste. Für eure Hilfe und über eure Anregungen würde ich mich sehr freuen.

Bis dahin verbleibe ich mit vielen Grüßen
Rio
Mitglied: Biber
01.09.2011 um 17:46 Uhr
Moin Rio1980,

Die Frage für mich ist, ob das per Makro überhaupt lösbar ist und ob es sich alles in einem einzigen Makro verwirklichen lässt, oder ob man das in 2 Makros verpacken müsste

Ich sach' mal so:
Für mich ist noch gar nicht die Phase erreicht, in der ich mir zutrauen würde zu sagen
"Nimm einen 10er Ringschlüssel und einen Kreuzschlitzschraubendreher mit Bambusgriff, der Rest ergibt sich dann von allein."

Ein, zwei Punkte an dem Gesamtplan würde ich gern noch mal etwas trennschärfer formuliert haben wollen,
i.e. von "unzähligen" Unterordnern und unzähligen Input-Textdateien wissen wir ja jetzt, aber
  • die Zieldimensionen sind EINE Exceltabelle mit EINEM Sheet ??
  • oder mit einem Sheet pro Importiere-mir-alle-Daten-Lauf?
  • oder ein Excelsheet pro Woche?
  • Ist es eine einmalige oder einer regelmäßige Aktion, passiert es täglich, stündlich oder immer zur Grammy-Verleihung?
  • Soll, muss oder darf der Import manuell gestartet werden oder jeden Freitag mittag automatisch?
  • WTAF sind denn die "bestimmten Kriterien", nach denen da irgendwas zusammengeharkt werden soll? Stehen die auch in einer CSV-Datei oder "weiss" das Makro diese Kriterien oder gibt der/die UserIn dat ein?

Diese Rahmenparameter wären für mich schon wesentlich, ehe ich mich auf die Suche nach dem richtigen Werkzeug oder Schnitzmesser mache.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
01.09.2011 um 18:32 Uhr
Hallo Rio1980 und Biber!

Um mal zu sehen, ob ich einige Antworten auf Bibers Fragen erraten habe, ein [Edit] erweiterter [/Edit] Versuch, die vorgegebenen Daten einzulesen:
01.
Sub Importieren()
02.
Basis = "C:\Textdateien"
03.
Typ = "txt" 'Dateityp der zu verarbeitenden Dateien in Kleinbuchstaben
04.
Dateien = Array("C:\Datei1.txt", "C:\Datei2.txt", "C:\Datei3.txt")
05.

06.
Adressen = Array(1, 2, 4, 5, 6, 7, 11) 'da alle Werte in Spalte B stehen, nur die Zeilennummern
07.
SchlSpalte = 2 'Spalte B = Schlüsselspalte für Suche in den Dateien
08.
Delim = ":" 'Trennzeichen
09.

10.
AbZeile = 2 'ab dieser Zeile werden die Werte in die Zieltabelle geschrieben
11.
AbSpalte = 1 'Spalte A; ab dieser Spalte werden die Werte in die Zieltabelle geschrieben
12.

13.
MaxFeld = UBound(Adressen) 'höchster Index in der Adressentabelle (= Anzahl der Felder - 1)
14.
Dim Daten()
15.

16.
Set fso = CreateObject("Scripting.FileSystemObject")
17.
Set d = CreateObject("Scripting.Dictionary")
18.

19.
For Each Datei In Dateien 'alle Dateien in Dictionary einlesen
20.
    Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf) 'in Zeilenarray einlesen
21.
    For i = 0 To UBound(Zeilen) 'alle Zeilen durchgehen
22.
        Zeile = Trim(Zeilen(i)) 'ev leading/trailing blanks entfernen
23.
        If Zeile <> "" Then 'keine leere Zeile verarbeiten
24.
            Schl = Split(Zeile, Delim)(0) 'Schlüssel ist erstes Feld
25.
            If Not d.Exists(Schl) Then 'noch kein Datensatz mit diesem Schlüssel vorhanden
26.
                Werte = Split(Replace(Zeile, Schl & Delim, "", 1, 1), Delim) 'Werte (erst ab 2. Spalte) in Array übernehmen und ...
27.
                d.Add Schl, Werte '... dieses im Dictionary zum Schlüssel ablegen
28.
            Else 'Schlüssel gab es schon
29.
                MsgBox Schl & " ist bereits vorhanden!", vbCritical
30.
                '### weitere Vorgangsweise? ###
31.
            End If
32.
        End If
33.
    Next
34.
Next
35.

36.
Zeile = AbZeile
37.
Cells(Zeile, AbSpalte).Select 'Startzelle für Daten markieren und ...
38.
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).ClearContents '... ab hier Inhalte löschen
39.

40.
For Each Ordner In fso.GetFolder(Basis).SubFolders 'alle Unterordner des Basisordners durchgehen
41.
    For Each Datei In fso.GetFolder(Ordner).Files 'alle Dateien des jeweiligen Unterordners durchgehen ...
42.
        If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then '... und nur solche des vorgegebenen Typs verarbeiten
43.
            Zeilen = Split(Datei.OpenAsTextStream.ReadAll, vbCrLf) 'alle Zeilen der Datei in Array einlesen
44.
            ReDim Daten(MaxFeld)
45.
            For i = 0 To MaxFeld 'alle Feldwerte lt Adressentabelle ermitteln
46.
                Daten(i) = Split(Zeilen(Adressen(i) - 1), Delim)(1) 'Zeile lt Adressentabelle zerlegen und zweites Feld (= Spalte "B") verwenden
47.
            Next
48.
            Rows(Zeile).EntireRow.ClearContents 'Tabellenzeile löschen
49.
            Cells(Zeile, AbSpalte).Resize(1, MaxFeld + 1).Value = Daten 'Datensatz (Teil 1) in Zieltabelle eintragen
50.
            
51.
            Schl = Cells(Zeile, SchlSpalte).Value 'Schlüsselbegriff auslesen
52.
            If d.Exists(Schl) Then 'wenn Daten zu diesem Schlüssel vorhanden, ...
53.
                Werte = d.Item(Schl) '... diese auslesen und ...
54.
                Cells(Zeile, AbSpalte + MaxFeld + 1).Resize(1, UBound(Werte) + 1).Value = Werte 'am Ende der Tabellenzeile hinzufügen
55.
            End If
56.
            
57.
            Zeile = Zeile + 1 'nächste Zeile der Zieltabelle
58.
        End If
59.
    Next
60.
Next
61.
End Sub
Hinsichtlich "Datei1" bis "Datei3" wurde unterstellt, dass
  • es sich ebenfalls um Textdateien mit dem Trennzeichen ":" handelt
  • diese Dateien alle gleich strukturiert sind (Weshalb werden die Daten nicht gleich in einer Datei zusammengefasst?)
  • Überschneidungen der Teilenummern (eine Nummer kommt in mehreren Dateien vor) erkannt werden müssen (Was dann zu geschehen hätte, wäre noch zu klären)

Grüße
bastla

[Edit] "Nachschlagen" in den Dateien "Datei1" bis "Datei3" sowie Löschen (alter Daten) der Zieltabelle hinzugefügt [/Edit]
Bitte warten ..
Mitglied: Biber
01.09.2011 um 21:13 Uhr
[OT] @bastla

Natürlich kenne ich auch die Situation, dass ich beim Heimkommen einen Zettel auf dem Küchentisch vorfinde mit den Worten:
"Zutaten für's Abendessen liegen im Kühlschrank. Fang ruhig schon mal an zu Kochen. Bin zum Essen wieder da."

...und im Kühlschrank liegen dann ein paar Fischfilets, ein halbes Glas Brombeermarmelade, 2 Becher Quark, 4 Stangen Rhabarber und der Rest einer Tube Gleitcreme.

Sollte ich wirklich mit diesen Infos schon anfangen und mache ich damit wirklich allen Beteiligten eine Freude?

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
01.09.2011 um 21:27 Uhr
[OT] @Biber
Also Dir traue ich durchaus zu, daraus etwas Interessantes zu kreieren - und Du doch auch ...

... und wenn der Rhabarber schon mal da ist ...

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Biber
01.09.2011 um 21:41 Uhr
[OT ii] @bastla

Ich sach' ma so...

Natürlich gibt es erstmal Pluspunkte, wenn pünktlich etwas Warmes auf dem Tisch steht.
Jedenfalls eigentlich immer.

Aber ich sehe dennoch ein gewisses Restrisiko....

Und überhaupt: zu den drei Dingen, bei denen Zeit nun wirklich keinerlei Rolle spielt, gehört für mich auch das Kochen.
Heisst ja nicht, dass ich deshalb etwas anbrennen lasse.

Grüße
Biber
[/OT ii]
Bitte warten ..
Mitglied: Rio1980
01.09.2011 um 23:09 Uhr
@Biber

Danke schon mal im Voraus dass du dir die Sache angesehen hast.
Ja, das Ziel soll EINE Sammeldatei und EIN Sheet sein...immerhin reden wir hier nach dem aussieben der Daten nur noch von 14 Spalten und ein paar hundert Zeilen, sollte machbar sein denke ich.
Es ist mit sicherheit eine Aktion die noch mehrfach durchgeführt wird, aber ein zeitlicher Abstand ist noch nicht ersichtlich, auch wenn ich schon mal sagen kann, dass es sicher nicht wöchentlich sein wird, sondern schon mehr Zeit ins Land gehen wird und ich somit auf luxeriöse und sicher aufwenidge Abfrage über schon erfasste Daten bei erneuter Durchführung des Makros auf Grund der ohenhin vorhandenen Komplexität verzichtet habe. Da das dann nicht regelmäßig gemacht wird werde ich den Import auch manuell nach Bedarf starten. Das Suchkriterium ist wie bereits weiter unten im ursprünglichen Text erklärt die Teilenummer.

@ Bastla

WOW! Auch wenn ich dass Makro erst Morgen auf der Arbeit testen kann, sieht es schon mal sehr gut aus und entspricht was das Einlesen der Textdateien angeht meinen Vorstellungen. Was die Dateien 1-3 angeht sind diese ganz normale excel Dateien und es sind drei an der Zahl, da drei verschiedene Mitarbeiter von verschiedenen PC´s aus parallel Daten editieren müssen. Im übrigen ist der Aufbau der Dateien identisch und doppelt oder dreifach vorhandene Teilenummern pro Datei und dateiübergreifend sind nicht vorhanden.

[OT]
Im übrigen finde ich euren Disput sehr erheiternd
[/OT]

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
01.09.2011 um 23:45 Uhr
Hallo Rio1980!

Die folgende Version holt die "Nachschlage"-Daten aus den Excel-Dateien "Datei1.xls" - "Datei3.xls"
01.
Sub Importieren()
02.
Basis = "C:\Textdateien"
03.
Typ = "txt" 'Dateityp der zu verarbeitenden Dateien in Kleinbuchstaben
04.
Dateien = Array("C:\Datei1.xls", "C:\Datei2.xls", "C:\Datei3.xls")
05.

06.
Adressen = Array(1, 2, 4, 5, 6, 7, 11) 'da alle Werte in Spalte B stehen, nur die Zeilennummern
07.
SchlSpalte = 2 'Spalte B = Schlüsselspalte für Suche in den Dateien
08.
Delim = ":" 'Trennzeichen
09.

10.
AbZeile = 2 'ab dieser Zeile werden die Werte in die Zieltabelle geschrieben
11.
AbSpalte = 1 'Spalte A; ab dieser Spalte werden die Werte in die Zieltabelle geschrieben
12.

13.
AbZeileQuelle = 1 'erste Datenzeilen in den "Nachschlage"-Dateien
14.
AbSpalteQuelle = 1 'erste Datenspalte in den "Nachschlage"-Dateien
15.
DatenSpaltenQuelle = 7 'Anzahl Datenspalte ohne Schlüsselspalte
16.

17.

18.
MaxFeld = UBound(Adressen) 'höchster Index in der Adressentabelle (= Anzahl der Felder - 1)
19.
Dim Daten()
20.

21.
Set fso = CreateObject("Scripting.FileSystemObject")
22.
Set d = CreateObject("Scripting.Dictionary")
23.

24.
Set Sammel = ThisWorkbook
25.
For Each Datei In Dateien 'alle Dateien in Dictionary einlesen
26.
    Set Quelle = Workbooks.Open(Datei)
27.
    With Quelle.Worksheets(1)
28.
        Zeile = AbZeileQuelle
29.
        Schl = Trim(.Cells(Zeile, AbSpalteQuelle).Value)
30.
        Do Until Schl = ""
31.
            If Not d.Exists(Schl) Then 'noch kein Datensatz mit diesem Schlüssel vorhanden
32.
                Werte = .Cells(Zeile, AbSpalteQuelle + 1).Resize(1, DatenSpaltenQuelle) 'Werte (ab 2. Spalte) in Array übernehmen und ...
33.
                d.Add Schl, Werte '... im Dictionary zum Schlüssel ablegen
34.
            Else 'Schlüssel gab es schon
35.
                MsgBox Schl & " ist bereits vorhanden!", vbCritical
36.
            End If
37.
            
38.
            Zeile = Zeile + 1
39.
            Schl = Trim(.Cells(Zeile, AbSpalteQuelle).Value)
40.
        Loop
41.
    End With
42.
    Quelle.Close
43.
Next
44.

45.
Sammel.Activate
46.
Zeile = AbZeile
47.
Cells(Zeile, AbSpalte).Select 'Startzelle für Daten markieren und ...
48.
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).ClearContents '... ab hier Inhalte löschen
49.

50.
For Each Ordner In fso.GetFolder(Basis).SubFolders 'alle Unterordner des Basisordners durchgehen
51.
    For Each Datei In fso.GetFolder(Ordner).Files 'alle Dateien des jeweiligen Unterordners durchgehen ...
52.
        If LCase(fso.GetExtensionName(Datei.Name)) = Typ Then '... und nur solche des vorgegebenen Typs verarbeiten
53.
            Zeilen = Split(Datei.OpenAsTextStream.ReadAll, vbCrLf) 'alle Zeilen der Datei in Array einlesen
54.
            ReDim Daten(MaxFeld)
55.
            For i = 0 To MaxFeld 'alle Feldwerte lt Adressentabelle ermitteln
56.
                Daten(i) = Split(Zeilen(Adressen(i) - 1), Delim)(1) 'Zeile lt Adressentabelle zerlegen und zweites Feld (= Spalte "B") verwenden
57.
            Next
58.
            Cells(Zeile, AbSpalte).Resize(1, MaxFeld + 1).Value = Daten 'Datensatz (Teil 1) in Zieltabelle eintragen
59.
            
60.
            Schl = Cells(Zeile, SchlSpalte).Value 'Schlüsselbegriff auslesen
61.
            If d.Exists(Schl) Then 'wenn Daten zu diesem Schlüssel vorhanden, ...
62.
                Werte = d.Item(Schl) '... diese auslesen und ...
63.
                Cells(Zeile, AbSpalte + MaxFeld + 1).Resize(1, DatenSpaltenQuelle).Value = Werte 'am Ende der Tabellenzeile hinzufügen
64.
            End If
65.
            
66.
            Zeile = Zeile + 1 'nächste Zeile der Zieltabelle
67.
        End If
68.
    Next
69.
Next
70.
End Sub
Geschrieben wird, wie auch in der ersten Fassung, in die aktuelle Tabelle der Datei, welche das Makro enthält - und natürlich ist auch das hier produzierte Ergebnis statisch (wird also nur durch neuerliches Ausführen des Makros verändert).

Grüße
bastla

[Edit] Löschen der bereits vorhandenen (alten) Daten des Zieltabellenblattes verbessert [Edit]
Bitte warten ..
Mitglied: Rio1980
05.09.2011 um 11:02 Uhr
Hallo bastla!

Vielen Dank für die Mühe! Das importieren der Daten aus den Textdateien klappt super!
Allerdings erscheint beim durchführen des Makros ziemlich oft (vermutlich so oft wie Zeilen in meiner generierten Sammeldatei existieren) die Meldung " ist bereits vorhanden!" und nachdem das Makro durchgelaufen ist habe ich zwar eine wunderschöne Sammlung der Daten aus den Textdateien, aber die DAten aus den Exceldateien 1 - 3 sind nicht gefunden....bzw nicht übernommen worden.

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
05.09.2011 um 12:38 Uhr
Hallo Rio1980!
Allerdings erscheint beim durchführen des Makros ziemlich oft (vermutlich so oft wie Zeilen in meiner generierten Sammeldatei existieren)
Die Meldung betrifft nur das Einlesen der Daten aus "Datei1.xls" - "Datei3.xls" und hat mit den Daten aus den Textdateien nix zu tun ...
die Meldung " ist bereits vorhanden!"
Die Meldung sollte auch eine Teilenummer ausgeben ...

Sinn der gesamten Aktion: In den Zeilen 25 bis 43 wird aus den Daten der xls-Dateien ein "Dictionary" aufgebaut - dieses besteht aus Datensätzen mit einem Schlüssel (der Teilenummer) und dem zugehörigen Wert (den weiteren Werten aus der Zeile als Array) und existiert nur zur Laufzeit im Arbeitsspeicher. Der Schlüssel muss dabei einmalig sein, daher wird zunächst geprüft, ob er bereits existiert, und wenn ja, die angesprochene Meldung erzeugt.
Zum Testen kannst Du im VBA-Editor den Cursor zwischen "Sub Importieren()" und "End Sub" platzieren und dann mit der Taste F8 in Einzelschritten durch den Ablauf gehen. Dabei kannst Du jederzeit (zB wenn eben die angesprochene Meldung ausgegeben wurde) den Mauszeiger über einer Variablen im Code (zB "Schl" platzieren und Dir damit deren Wert anzeigen lassen.

Eine Anmerkung noch: Da ich nicht weiß, welche Tabellen es in Deinen xls-Dateien gibt, wird jeweils auf die erste dieser Tabellen zugegriffen - siehe dazu Zeile 27. Diese Zeile könntest Du auf
With Quelle.Worksheets("Blattname")
ändern, damit die Tabelle "Blattname" ausgelesen wird.

Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
12.09.2011 um 11:34 Uhr
Hallo Bastla!

Die Meldung betrifft nur das Einlesen der Daten aus "Datei1.xls" - "Datei3.xls" und hat mit den Daten aus den
Textdateien nix zu tun ...

Leider hat sich das Problem aufgetan, dass die Teile-Nr in den Exceldateien doch wiederholt vorkommen kann, was auch leider nicht abzuändern ist
Ich habe das Makro in der Version durchlaufen lassen und versucht die Zeilen 34 und 35 wegzulassen, aber das importeiren der Daten aus den Datei1.xls" - "Datei3.xls klappt leider nicht. Der Unterschied ist natürlich nur, dass die Msg-Box nicht mehr erscheint und das Makro dann Meldungen durchläuft. Die Dateien werden im Hintergrund zwar geöffnet und er arbeitet auch ne weile damit, aber am Ende kommt "nur" eine Auflistung der importierten Daten aus den Textdateien ohne die Daten aus den Exceldateien 1-3. Für mich sieht es so aus dass das "Dictionary" aus den Exceldateien aufgebaut wird, aber der Abgleich zwischen der erzeugten Tabelle aus den Textdateien und dem "Dictionary" hinkt.

Was die Anzahl der Tabellen in den Exceldateien angeht, sind da zwar mehrere vorhanden, aber ich benötige nur die Daten aus Tabelle1, somit muss die Zeile 27 nicht abgeändert werden.

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
12.09.2011 um 16:53 Uhr
Hallo Rio1980!

Das Redundanz-Problem ist eigentlich auch eine andere Baustelle - die Zeilen 34 und 35 kannst Du also weglassen (es wird dann eben - kommentarlos - immer mit den ersten gefundenen Daten gearbeitet).
Wenn der Tabellenname immer "Tabelle1" lautet, würde ich diesen trotzdem in Zeile 27 verwenden ("Tabelle1" muss nicht immer das erste Blatt der Mappe sein).
Da das Script bei meinen Tests den gewünschten Erfolg gebracht hat, ist es schwer, den Grund für den Fehler mit Deinen Daten nachzuvollziehen - vielleicht noch als Hinweis zur Fehlersuche:
Setze auf die Zeile 61 einen Breakpoint (vor der Zeile in die graue Spalte klicken - es wird dann ein roter Punkt angezeigt) und die Ausführung hält an dieser Stelle an; dann kannst Du, wie oben beschrieben, durch Zeigen (ohne Klicken) mit der Maus auf eine Variable deren Wert anzeigen lassen - insbes die Variable "Schl" aus Zeile 60 wäre hier interessant. Danach kannst Du mit F8 in Einzelschritten weiter gehen, oder mit F5 den Ablauf wieder starten (bis zum nächsten Breakpoint oder bis zum Ende).

Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
16.09.2011 um 15:41 Uhr
Hallo Bastla!

Ein wiederholtes Danke für deine Bemühungen mir zu helfen!
Deine Anregungen habe ich so weit alle durchprobiert. Die Zeile 27 ist abgeändert und ich habe probiert dem Fehler durch manuelles Durchlaufen des Makros auf die Spur zu kommen. Der Einfachheit halber habe ich EINE einzige DUMMY Exceldatei erstellt in der nur eine Zeile mit Daten enthalten ist, wobei der Schlüssel (Schl = Teilenummer) mit der Teilenummer aus der ersten Zeile der generierten Sammeldatei identisch ist. Beim durchlaufen der Zeilen 1 - 43 wird somit im "Dictionary" nur ein einziger Schlüssel erstellt und die dazugehörigen Daten müssten eingelesen werden. Beim weiteren durchlaufen des Makros wird dann beim ersten Durchlauf der Schleife (Zeile 50 - 68) der "Schl" in Zeile 60 korrekt erkannt und müsste mit dem "Schl" aus dem "Dictionary" identisch sein. Bei der Prüfung in Zeile 61 wird aber anscheinend keine Übereinstimmung gefunden, da direkt in die Zeile 64 gesprungen wird. Es sieht also so aus das der "Schl" zwar identisch ist, aber die Zeilen 62 - 63 nicht abgearbeitet werden...
Hast du evtl noch eine Idee? Die Teilenummern sehen wie folgt aus, falls das irgendeine Rolle spielt: 12345678-01

Viele Grüße
Rio
Bitte warten ..
Mitglied: bastla
16.09.2011 um 15:53 Uhr
Hallo Rio1980!
Es sieht also so aus das der "Schl" zwar identisch ist
... was es auch würde, wenn im einen Fall am Ende ein Leerzeichen stünde, im anderen nicht - versuch es daher mit folgender Zeile 60:
Schl = Trim(Cells(Zeile, SchlSpalte).Value) 'Schlüsselbegriff auslesen
Grüße
bastla
Bitte warten ..
Mitglied: Rio1980
20.09.2011 um 02:02 Uhr
Hallo Bastla!

Das wars wohl gewesen! Das Makro läuft jetzt durch und findet jetzt Übereinstimmungen zu den "Schlüsseln" und kopiert die entsprechendenDaten in die Sammeldatei.Somit steht schon mal fest, dass das Makro nun funktioniert. Allerdings sind die Daten nicht vollständig was die Anzahl der übereinstimmenden "Schlüssel" angeht...werde wohl schauen müssen wo es noch Unterschiede (Schreibweise, Leerschritte etc) geben kann. Vielen Dank!

Viele Grüße
Rio
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Dublikate Entfernen per Excel Makro VBA
gelöst Frage von novregenMicrosoft Office3 Kommentare

Hallo, ich habe eine Excel Liste mit variabler Zeilenanzahl und 33 Spalten. Diese Liste bekomme ich monatlich. Leider gibt ...

Microsoft Office

Excel Makro VBA Sortierung nach Spaltennamen

gelöst Frage von easy4breezyMicrosoft Office3 Kommentare

Hi Leute, ich habe mich hier schon eingelesen und auch im Internet, aber irgendwie komme ich zu keiner Lösung ...

Microsoft Office

Passwortgeschützte Excel Dateien bearbeiten VBA Makro

Frage von schwalbepilotMicrosoft Office2 Kommentare

Ich möchte Fußzeilen in alle Excel Dateien eines Ordners einfügen. Das klappt alles soweit, leider sind alle Dateien passwortgeschützt. ...

Microsoft Office

Excel-Makro

gelöst Frage von yuki13Microsoft Office7 Kommentare

Hallo Zusammen!! :-) Ich bin nicht so fit in Excel Makros und wollte mich hier erkundigen, ob mir jemand ...

Neue Wissensbeiträge
Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Tipp von ChriBo vor 6 StundenFirewall

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 1 TagInternet

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter den Seitenbetreibern ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 1 TagGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Google Android
Facebooks unsichtbare Datensammlung
Information von AnkhMorpork vor 1 TagGoogle Android2 Kommentare

Rund 30 Prozent aller Apps im Play-Store nehmen Kontakt zu Facebook auf, sobald man sie startet. So erfährt der ...

Heiß diskutierte Inhalte
Linux Userverwaltung
LogIn Versuche beschränken auf EINEN Versuch
gelöst Frage von GarroshLinux Userverwaltung21 Kommentare

Folgendes Problem Ich habe einen dezidierten Server beim Hoster gemietet, installiert ist Ubuntu 18.04.2 LTS‬ und als Webinterface Plesk. ...

DSL, VDSL
Neuer Glasfaser Anschluss - IPv4-Adressraum
Frage von norre2000DSL, VDSL12 Kommentare

Hallo Zusammen, ich werde meinen Glasfaser Anschluss wechseln und bin beim Ausfüllen des Antrags auf Fragen gestoßen bei denen ...

Internet
Aktuell HP-Support-Seite kaputt?
gelöst Frage von LochkartenstanzerInternet12 Kommentare

Hallo Kollegen, Weiß einer von euch, seit wann die HP-Support-Seite kaputt ist? ) Wollte heute morgen Druckertreiber runterladen und ...

Ubuntu
Exchange Alternative auf Ubuntu
Frage von TELLOUbuntu11 Kommentare

Hi NG, wir müssen für unsere Kleine Firma (5 User) das Email / Kalendersystem neu einrichten. Ich könnte jetzt ...