Anzeige
Archiv - Navigation
1008to1012
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

Dateizusammenführung Teil 2

Dateizusammenführung Teil 2
17.09.2008 09:06:00
Michael
Guten Morgen Excelgemeinde,
wiedereinmal stehe ich vor einem Problem mit Excel und hoffe, das ihr mir wieder helfen könnt.
steht.
Aus diesem Beitrag ging folgende Formel hervor "=INDEX(Datei2!$F$2:$F$10;VERGLEICH('Datei3 Gesamt'!A2;Datei2!$B$2:$B$10&"_"&Datei2!$C$2:$C$10;0))"~f~
Nun zur Problemstellung:
1x die Woche muss ich eine Datei (Datei3) aktuallisieren. Dazu öffne ich die Datei3 und eine CSV Datei (Datei2) (die die neuen Werte enthält) und blende beide Dateien über Fenster--Horizontal anordnen ein. Nun wende ich in Datei3 o.g. Formel an. Dies muss ich für 3 Spalten in Datei2 machen.
Datei3 Spalte L
~f~"=INDEX(<b>Datei2!$E$2:$E$10</b>;VERGLEICH('Datei3 Gesamt'!A2;Datei2!$B$2:$B$10&"_"&Datei2!$C$2:$C$10;0))"
Datei3 Spalte M
"=INDEX(<b>Datei2!$F$2:$F$10</b>;VERGLEICH('Datei3 Gesamt'!A2;Datei2!$B$2:$B$10&"_"&Datei2!$C$2:$C$10;0))"
Datei3 Spalte N
"=INDEX(<b>Datei2!$G$2:$G$10</b>;VERGLEICH('Datei3 Gesamt'!A2;Datei2!$B$2:$B$10&"_"&Datei2!$C$2:$C$10;0))"
Nach Eingabe der Formel markiere ich alle 3 Spalten in Datei3 und kopiere den Inhalt nach unten. Danach kopiere ich den Inhalt und füge über Inhalte einfügen nur die Werte wieder ein, da sich sonst die Datei3 unnötig aufbläht, da ich die ganze Prozedur in 30 Tabellenblättern der Datei3 wiederholen muss. Und im Schnitt sind es mehr als 10000 Zeilen pro Tabellenblatt.
Leider wechselt der Dateiname von Datei2 jede Woche (wird immer mit dem aktuellen Datum überschrieben).
Da die Aktuallisierung und Eingabe der Formel immer von Hand gemacht werden muss, wollte ich mal fragen, ob man das auch irgendwie per Makro-VBA lösen kann?
Bin für jeden Hinweiß dankbar.
Gruss..Michael

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateizusammenführung Teil 2
17.09.2008 09:29:27
David
Hallo Michael,
leider weiß ich nicht, wie ich auf diesen Beitrag verlinken kann
Klicke auf "Deine Beiträge" oben in der Leiste und dann kannst du nach Abfrage deiner Benutzerdaten auf den entsprechenden Link Rechtsklicken und per Verknüpfung kopieren den Link bekommen.
Zu deinem Problem noch ein paar Fragen:
Wie definiert sich, von wo bis wo die Formel in Datei3 stehen soll (in welchen Zeilen), z. Bsp. anhand einer bestimmten (welche?) Spalte?
Wie heißen die Tabellenblätter in Datei3, sind diese Namen fest oder variabel?
Wie soll der Dateiname von Datei2 ermittelt werden, per Inputbox oder per Wert einer Zelle oder aus der Liste aktuell geöffneter Dateien? Ist der Dateiname von Datei2 zumindest zum Teil fix?
Gruß
David
Anzeige
AW: Dateizusammenführung Teil 2
17.09.2008 11:10:52
Michael
Hallo David,
ah, jupp, jetzt sollte die Verlinkung funktionieren:-) https://www.herber.de/forum/archiv/1000to1004/t1003072.htm
Nun zu deinen Fragen:
Wie definiert sich, von wo bis wo die Formel in Datei3 stehen soll (in welchen Zeilen), z. Bsp. anhand einer bestimmten (welche?) Spalte?
Die Formel soll immer von der zweiten bis zur letzten Zeile gehen und definiert sich über den Namen der Spalte, welche in Datei 2 und 3 gleich sind und mit Spalte A der Datei 3 verglichen und aktualisiert werden müssen.Und das mach ich im Moment mit der Indexformel.
Wie heißen die Tabellenblätter in Datei3, sind diese Namen fest oder variabel?
Die Namen der Tabellenblätter sind fix (immer Autokennzeichen der Stadt plus Gebäudebezeichnung) also zb. SB HBF für Saarbrücken Hauptbahnhof
Wie soll der Dateiname von Datei2 ermittelt werden, per Inputbox oder per Wert einer Zelle oder aus der Liste aktuell geöffneter Dateien? Ist der Dateiname von Datei2 zumindest zum Teil fix?
Am besten wäre es aus der Liste der aktuell geöffneten Dateien.
Der Dateiname von Datei 2 sieht ungefähr so aus:
080911-09h-Pliste=xxx-xx-xx=Saarbruecken_AmHauptbahnhof4.csv
Die ersten 2 Angaben ändern sich jede Woche. Ab -Pliste= bleibt alles gleich. Ist dann aber natürlich unterschiedlich pro Tabellenblatt.
Gruss..Michael
Anzeige
AW: Dateizusammenführung Teil 2
17.09.2008 15:21:00
David
Hallo Michael,
ich hoffe, ich habe das jetzt hinbekommen, da das ziemlich schwierig ist, wenn man die Originaldateien nicht kennt.
Bitte teste mal folgenden Code:

Option Explicit
Sub test()
Dim zeile, i As Long
Dim wks As Worksheet
Dim wkb As Workbook
Dim quelle As String
With ThisWorkbook.Worksheets("Gesamt")
zeile = .Cells(.Rows.Count, 1).End(xlUp).Row    'letzte Zeile in Blatt Gesamt, Spalte 1 = A
End With
'Analyse der Dateinamen geöffneter Dateien
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb.Name
Next
For Each wks In ThisWorkbook.Worksheets
If wks.Name  "Gesamt" Then
For i = 2 To zeile          'Eintragen der Formeln
Range("L" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C5:R6C5,MATCH(Gesamt!RC1,'" & quelle _
& "'!R2C2:R6C2&""_""&'" & quelle & "'!R2C3:R6C3,0))"                  'Spalte L
Range("M" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C6:R6C6,MATCH(Gesamt!RC1,'" & quelle _
& "'!R2C2:R6C2&""_""&'" & quelle & "'!R2C3:R6C3,0))"                  'Spalte M
Range("N" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C7:R6C7,MATCH(Gesamt!RC1,'" & quelle _
& "'!R2C2:R6C2&""_""&'" & quelle & "'!R2C3:R6C3,0))"                  'Spalte N
Next
End If
Next
End Sub


Dieser muss in deine "Datei3" in ein Modul kopiert werden. Dann kannst du das Makro starten.
Ich habe allerdings keine Fehlerbehandlung und ähnliches eingebaut, also vorher vielleicht kurz schauen, ob die Spalten passen, ich habe entsprechende Kommentare beigefügt.
Vor Start am Besten auch eine Kopie der Dateien anlegen.
Probleme/Fragen müssen dann bis morgen warten, für heute bin ich weg.
Gruß
David

Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 09:45:57
Michael
Hallo David,
danke erstmal für die Mühe. Leider hab ich noch nicht so den Plan mit VBA und habe Schwierigkeiten, deinen Code anzupassen.Du schreibst zb.
Range("L" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C5:R6C5,MATCH(Gesamt!RC1,'" & quelle _
& "'!R2C2:R6C2&""_""&'" & quelle & "'!R2C3:R6C3,0))" 'Spalte L
Was meinste du zb. mit dem R2C5, R6C5 usw?
In meiner Formel sieht das ja so aus:
"=INDEX(Datei2!$F$2:$F$10;VERGLEICH('Datei3 SB HBF'!A2;Datei2!$B$2:$B$10&"_"&Datei2!$C$2:$C$10;0))"
In diesem Beispiel werden die Werte aus Spalte F aus der CSV-Datei nach Spalte I in Datei 3 kopiert und dazu müssen vorher erstmal die Spalten B u C aus Datei2 zusammengefügt werden und mit Spalte A aus Datei3 vergleichen werden und wo Übereinstimmungen bestehen, werden die Werte rüberkopiert.
Vielleicht kannst du mir helfen, deinen Code entsprechend anzupassen?
Danke
..Michael
Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 10:05:00
David
Wie gesagt, ohne die Dateien zu kennen, kann ich da nicht weiterhelfen.
Was meinste du zb. mit dem R2C5, R6C5 usw?
R = Row (Zeile)
C = Column (Spalte)
R2C5 wäre somit Zeile2/Spalte5 = E2
aus technischen Gründen (weil Matrixformel) muss die Formel in R1C1-Format und in der englischen Version im Makro verwendet werden.
Du kannst das einfach testen: Starte den Makrorecorder, schreibe eine Matrixformel in eine Zelle und bestätige das. Dann schau dir an, was der Recorder aufgezeichnet hat.
Die Formel von dir ist unverändert. Ich habe sie halt nur in VBA übersetzt (übersetzen müssen). Den Dateinamen habe ich per Platzhalter (quelle) eingebaut, da der ja nach deinen Vorgaben nicht immer gleich ist.
Gruß
David
Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 11:16:51
Michael
Hallo David,
hab nun mal versucht den Code anzupassen.
Option Explicit

Sub test3()
Dim zeile, i As Long
Dim wks As Worksheet
Dim wkb As Workbook
Dim quelle As String
With ThisWorkbook.Worksheets("SCM Gesamt PortsTEST")
zeile = .Cells(.Rows.Count, 1).End(xlUp).Row    'letzte Zeile in Blatt Gesamt, Spalte 1 = A
End With
'Analyse der Dateinamen geöffneter Dateien
For Each wkb In Workbooks
If Right(wkb.Name, 4) = ".csv" And InStr(wkb.Name, "Pliste") > 0 Then quelle = wkb.Name
Next
For Each wks In ThisWorkbook.Worksheets
If wks.Name  "SCM Gesamt PortsTEST" Then
For i = 2 To zeile          'Eintragen der Formeln
Range("H" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C6:R1000C6,MATCH(SCM Gesamt PortsTEST!RC1,'" & quelle
& "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"         'Spalte H
Range("I" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C7:R1000C7,MATCH(SCM Gesamt PortsTEST!RC1,'" & quelle _
& "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"          'Spalte I
Range("J" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C8:R1000C8,MATCH(SCM Gesamt PortsTEST!RC1,'" & quelle _
& "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"           'Spalte J
Next
End If
Next
End Sub


Aber der Makro wird nur bis & "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))" ausgeführ, dann kommt Syntaxfehler. Habe eigentlich nichts verändert nur die entsprechenden Reihen und Spalten.
Michael

Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 11:25:06
David
Ich vermute mal Fehler durch das Kopieren aus meinem Posting, dadurch sind evtl. die Zeilenumbrüche "verbogen". Versuche mal bitte die Zeile:

Range("H" & i).FormulaArray = _
"=INDEX('" & quelle & "'!R2C6:R1000C6,MATCH(SCM Gesamt PortsTEST!RC1,'" & quelle
& "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"


komplett in eine Zeile zu schreiben:


Range("H" & i).FormulaArray = "=INDEX('" & quelle & "'!R2C6:R1000C6,MATCH(SCM Gesamt PortsTEST!RC1,'" & quelle & "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"


Gruß
David

Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 11:32:36
Michael
Jetzt kommt
Laufzeitfehler 9
INDEX ausserhalb des gültigen Bereichs.
Michael
AW: Dateizusammenführung Teil 2
18.09.2008 11:40:00
David
ersetze mal bitte in der ersten Formel:

Range("H" & i).FormulaArray =


durch


Range("H" & i).Value =


und in der Formel selbst bei "=INDEX..." das = löschen,
die anderen beiden Formeln am besten erst mal auskommentieren (ein ' davor setzen)
geht es dann?
Gruß
David

AW: Dateizusammenführung Teil 2
18.09.2008 11:52:00
Michael
Hi David,
der Makro wird zwar ausgeführt aber in Spalte H der Datei SCM Gesamt (Datei 3) steht jetzt
INDEX('080911-09h-Pliste=xxx-xx-xxx=Berlin_xxxxxx-xxxx-Str5-11.csv'!R2C6:R1000C6,MATCH(B CM!RC1,'080911-09h-Pliste=xxx-xx-xxx=Berlin_xxxxx-xxxxxx-Str5-11.csv'!R2C2:R1000C2&"_"&'080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxxx-Str5-11.csv'!R2C3:R1000C3,0))
als Wert drin.
In Formel steht:
Range("H" & i).Value = "INDEX('" & quelle & "'!R2C6:R1000C6,MATCH(B CM!RC1,'" & quelle & "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"
Michael
Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 11:55:37
David
Ok, das war der Sinn der Sache. Jetzt vergleiche bitte mal die Formel, die das Makro eingetragen hat (das = davor denken), mit der Formel, die du manuell eintragen würdest (in der gleichen Zelle!!!).
Am besten beide mal hier posten. Wahrscheinlich ist dort noch irgendwo ein Fehler drin.
Gruß
David
AW: Dateizusammenführung Teil 2
18.09.2008 12:18:27
Michael
Hi David,
hier mal die 2 Formeln
Deine
Range("H" & i).Value = "INDEX('" & quelle & "'!R2C6:R1000C6,MATCH(B CM!RC1,'" & quelle & "'!R2C2:R1000C2&""_""&'" & quelle & "'!R2C3:R1000C3,0))"
Das RC 1 steht doch für Zeile/Spalte1 also A1, oder? Wird das automatisch dann mt nach unten gezählt?Weil die Abfrage ja eigentlich erst in A2 anfängt.
Meine
=INDEX('080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxxx-Str.csv'!$G$2:$G$134;VERGLEICH(B3; '080911-09h-Pliste=172-xx-xxx=Berlin_xxxx-xxxxx-Str.csv'!$B$2:$B$134&"_"&'080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxx-Str.csv'!$C$2:$C$134; 0))
Wird mit STRG+SHIFT+RETURN abgeschlossen.
Michael
Anzeige
AW: Dateizusammenführung Teil 2
18.09.2008 12:21:15
David
du solltest nicht die Formel IM Makro posten, sondern die Formel, die das Makro im Tabellenblatt eingetragen hat!
DAvid
AW: Dateizusammenführung Teil 2
18.09.2008 12:30:16
Michael
Aso, hatte gedacht, das ich das schon gepostet habe aber kein Problem.
Hier, was das Makro ins Tabellenblatt schreibt:
INDEX('080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxx-Str.csv'!R2C6:R1000C6,MATCH(B CM!RC1,'080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxxx-Str.csv'!R2C2:R1000C2&"_"&'080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxx-Str.csv'!R2C3:R1000C3,0))
Und meine Formel im Tabellenblatt:
=INDEX('080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxxx-Str.csv'!$G$2:$G$134;VERGLEICH(B3; '080911-09h-Pliste=172-xx-xxx=Berlin_xxxx-xxxxx-Str.csv'!$B$2:$B$134&"_"&'080911-09h-Pliste=172-xx-xxx=Berlin_xxxxx-xxxx-Str.csv'!$C$2:$C$134; 0))
Michael
AW: Dateizusammenführung Teil 2
18.09.2008 13:25:00
David
Kannst du die Originaldateien (abgespeckt) hochladen? Das Problem liegt irgendwo einfach nur in einer falsch geschriebenen Formel, aber ich finde es von hier aus nicht raus!
Was mir auf jeden Fall aufgefallen ist:
hinter Berlin_ kommen beim Makro xxxxx-xxxx und bei dir steht xxxxx-xxxxx. Da dieser String aber vom Makro anhand der geöffneten Dateien gefunden wird, muss das bei dir falsch sein (oder sind das nur Platzhalter?).
Dann stimmt der Bereich nicht: G2 ist nicht R2C6, sonder R2C7 usw.
Der Teil hinter MATCH(... scheint auch nicht zu stimmen. In meinem Ursprungsmakro stand dort "Gesamt!RC1". Wenn du das zu B CM geändert hast, musst du natürlich 'B CM' schreiben, da ein Leerzeichen im Namen ist, was Hochkommas erfordert.
Mach doch einfach mal, was ich vorhin vorgeschlagen habe:
Starte den Makrorekorder, gehe in die Zelle mit deiner Formel, die funktioniert, bestätige die Formel mit STRG-SHIFT-ENTER und beende die Aufzeichnung wieder.
Dann poste hier, was der Rekorder aufgezeichnet hat.
Gruß
David
AW: Dateizusammenführung Teil 2
18.09.2008 13:51:00
Michael
Hallo David,
ich probier mal die Dateien abzuspecken und hochzuladen. Schade, das es hier nicht so was gibt wie PN's in den "normalen" Foren:-)
Mit den X'en hab ich nur den Strassennamen und die IP Adresse überschrieben.
Mit dem Gesamt!RC1 meinst du damit den Namen der gesamten Datei oder nur des einzelnen Arbeitsblattes? Ich bin davon ausgegangen, das das Arbeitsblatt der Datei gemeint war und deswegen hab ich hier B CM geschrieben.
Leider nimmt der Makrorekorder die Tastenkombi STRG-SHIFT-ENTER nicht an. Da kommt immer die Fehlermeldung "Kann nicht aufzeichnen"
Michael
AW: Dateizusammenführung Teil 2
18.09.2008 14:04:00
David
du kannst die Datei auch packen, falls es nötig ist. Zip-Dateien kannst du auch hochladen.
Ich meinte auch das Arbeitsblatt, aber wie gesagt, bei Leerzeichen im Namen MÜSSEN die Hochkommata mit in die Formel. Davon bin ich nicht ausgegangen. Alternativ kannst du auch dein Arbeitsblatt umbenennen z. Bsp. B_CM und dann die Formel entsprechend ändern, dann kannst du die ' sparen.
Das der Makrorecorder streikt, kann ich nicht nachvollziehen. Bei mir geht das. Du kannst aber auch die Formel ohne die Tastenkombi abschicken, im Makro steht dann halt nur statt ".Array" ein ".Formula", die Formel selbst bleibt dadurch gleich.
David
PS: falls dich das nicht stört, kannst du auch deine Mail-Adresse posten, dann können wir darüber kommunizieren. Ich kann meine hier nicht posten, da Firmenadresse.
AW: Dateizusammenführung Teil 2
18.09.2008 14:24:00
Michael
Hallo David,
jupp über Mail gehts doch besser glaub ich :-)) Hier meine Adresse upsmike@web.de
Gruss..Michael
AW: Dateizusammenführung Teil 2
18.09.2008 14:25:26
David
Muss aber bis morgen warten, für heute bin ich weg.
Gruß
David
AW: Dateizusammenführung Teil 2
19.09.2008 10:24:39
Michael
Hallo David,
kein Problem. Wann, schätzt du, kannst du dich melden?
Michael

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige