Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1184to1188
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

Daten von Arbeitsmappe zu Arbeitsmappe übertragen

Daten von Arbeitsmappe zu Arbeitsmappe übertragen
Arbeitsmappe
Hallo Fachleute,
wie kann ich per Makro Daten von einer zur anderen Arbeitsmappe übertragen. Das Auffinden der Daten in der Quell-Mappe und das Ablegen der Daten in der Ziel-Mappe soll mit Hilfe von ID-Nummern bewerkstelligt werden.
Auf Ihre Hilfe hoffend, bedanke ich mich schon mal.
Gruß, Klaus
AW: Daten von Arbeitsmappe zu Arbeitsmappe übertragen
12.11.2010 00:01:56
Arbeitsmappe
Hallo Klaus,
hier das Grundgerüst eines Makros für einen solchen Datenabgleich über ID-Nummern.
Gruß
Franz
Sub Datenabgleich_ID()
'Daten aus zwei Tabellen abgleichen per Schlüsselspalte
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim varSchluessel
Dim lSpalteID_Quelle As Long, ZeileQuelle As Long, Zelle As Range
Dim lSpalteID_Ziel As Long, ZeileZiel As Long
'Tabelle mit ggf. auszulesenden Daten
Set wbQuelle = Workbooks("MappeDaten.xls") 'Name anpassen!
Set wksQuelle = wbQuelle.Worksheets("Tabelle2") 'Name - anpassen
'Tabelle in der Inhalte eingetragen werden sollen
Set wbZiel = Workbooks("MappeZiel.xls") 'Name anpassen!
Set wksZiel = wbZiel.Worksheets("Tabelle1") 'Name - anpassen
'Nrn. der Schlüsselspalten
lSpalteID_Ziel = 1 'ggf Anpassen
lSpalteID_Quelle = 1 'ggf Anpassen
Application.ScreenUpdating = False
With wksZiel
'Letzte Datenzeile in Zieltabelle
ZeileZiel = .Cells(.Rows.Count, lSpalteID_Ziel).End(xlUp).Row
For ZeileZiel = 2 To ZeileZiel
'ID-Wert aus Zeile in Zieltabelle einlesen
varSchluessel = .Cells(ZeileZiel, lSpalteID_Ziel)
'ID in Spalte der Quelltabelle suchen
Set Zelle = wksQuelle.Columns(lSpalteID_Quelle).Find(what:=varSchluessel, _
LookIn:=xlValues, lookat:=xlWhole)
If Zelle Is Nothing Then
'ID in Quelle nicht vorhanden
Else
ZeileQuelle = Zelle.Row
'Daten aus Quelle in Ziel eintragen
.Cells(ZeileZiel, 2).Value = wksQuelle.Cells(ZeileQuelle, 2).Value
.Cells(ZeileZiel, 3).Value = wksQuelle.Cells(ZeileQuelle, 5).Value
'usw.
End If
Next
Application.ScreenUpdating = True
End With
End Sub

Anzeige
AW: Daten von Arbeitsmappe zu Arbeitsmappe übertragen
12.11.2010 13:01:19
Arbeitsmappe
Hallo Franz,
vorab schon mal ein Danke. Komme aber erst Anfang nächster Woche dazu, das Makro einzubauen. Falls dann noch Fragen sind, möchte ich die gern stellen dürfen.
Gruß, Klaus
AW: Daten von Arbeitsmappe zu Arbeitsmappe übertragen
12.11.2010 13:08:16
Arbeitsmappe
Hallo Franz,
voran schon mal ein Danke. Leider komme ich erst Anfang nächster Woche dazu, das Makro einzubauen. Dabei noch auftretende Fragen möchte ich gern dann noch stellen dürfen.
Gruß und schönes WE, Klaus
AW: Daten von Arbeitsmappe zu Arbeitsmappe übertragen
12.11.2010 17:11:16
Arbeitsmappe
Hallo Franz,
hab doch noch Zeit gefunden, mich mit dem Makro zu beschäftigen. Daher muss ich wohl noch weitere Infos liefern.
Es handelt sich um eine Sportveranstaltung mit ca 100 Teilnehmern. Diese Teilnehmer spielen in verschiedenen Gruppen und Klassen. Die Auswertung der Spiele geschieht in ca 10 bis 12 verschiedenen Excel-Arbeitsmappen in denen die Plazierungen berechnet werden. Diese Arbeitsmappen sind in diesem Fall die Quelldateien. Zieldatei ist eine gesamte Teilnehmerliste mit den Startnummern der Teilnehmer, die als ID-Nummern gelten.
Aufgabe des Makros soll es sein, die die in den verschiedenen Klassen berechneten Platzziffern in die Teilnehmerliste zu übertragen.
Beispiel: Die ID-Nummern in einer der Quelldateien mit 6 Teilnehmern befinden sich in Spalte c11-c16 und die Platzziffern in Spalte AN11-AN16.
In der Zieldatei befinden sich die ID-Nummern in Spalte A2-A101 und die Platzziffern sollen entsprechend in die Zeile der ID-Nummer in Spalte L2-L101 eingetragen werden.
Hoffe, meine Erklärung ist verständlich.
Gruß, Klaus
Anzeige
AW: Daten in mehreren Arbeitsmappen suchen
13.11.2010 01:25:28
fcs
Hallo Klaus,
bei mehreren Dateien muss man diese in einer Schleife abarbeiten.
Ich hab das Makro mal in diese Richtung angepasst. Die Dateien mit den Klassen-Erbenissen werden in einem Datei-Dialogfenster mit Mehrfachauswahl ausgewählt.
Ich bin jetzt davon ausgegangen, dass in den Ergebniss-Dateien alle Ergebnisse in einem Tabellenblatt stehen und die ID-Nummern immer in Spalte C ab Zeile 11 abwärts.
Gruß
Franz
Option Explicit
'# Windows Vista  -       Excel 2007    -        VBA 6.5.1053 #
'# fcs                                             2010-11-12 #
'# Modul: Allgemeines Modul                                   #
'# Daten aus mehreren Dateien suchen                          #
'# Makros sollten auch unter Excel 2000 - 2003 lauffähig sein #
Sub Datenabgleich_ID()
'Daten aus mehreren Dateien über ID-Nummer in Zieltabelle eintragen
Dim wbZiel As Workbook, wksZiel As Worksheet
Dim wbQuelle As Workbook, wksQuelle As Worksheet
Dim iQuelle As Long, vQuelle As Variant, sQuelle As String, bQuelleOpen As Boolean
Dim vSchluessel
Dim lSpalteID_Quelle As Long, ZeileQuelle As Long, Zelle As Range
Dim lSpalteID_Ziel As Long, ZeileZiel As Long, rngID_Ziel As Range
'Arbeitsmappe/Tabelle in der Inhalte eingetragen werden sollen
Set wbZiel = Workbooks("Ergebnisliste.xls") 'oder = ActiveWorkbook 'Name anpassen!
Set wksZiel = wbZiel.Worksheets("Tabelle1")                        'Name - anpassen
'Nrn. der Schlüsselspalten
lSpalteID_Ziel = 1 'Spalte A -                                                ggf Anpassen
lSpalteID_Quelle = 3 'Spalte, sollte in allen Ergebnistabellen identisch sein - ggf Anpassen
If MsgBox("Vorhandene Ergebnis-Einträge in Spalte L löschen?", _
vbQuestion + vbYesNo, "Gesamt-Ergebnisliste aktualisieren") = vbYes Then
With wksZiel
.Range(.Cells(2, 12), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 11)).ClearContents
'Bereich mit ID-Nummern in Zieltabelle
Set rngID_Ziel = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
End If
'Quelldateien auswählen
vQuelle = Application.GetOpenFilename( _
Filefilter:="Excel (*.xls;*.xlsx;*.xlsm;*.xlsb),*.xls;*.xlsx;*.xlsm;*.xlsb", _
Title:="Bitte alle Dateien mit Ergebnissen der Klassen auswählen", _
MultiSelect:=True)
If IsArray(vQuelle) = False Then Exit Sub 'Auswahldialog wurde abgebrochen
Application.ScreenUpdating = False
Application.EnableEvents = False
'ausgewählte Quell-Dateien abarbeiten
For iQuelle = LBound(vQuelle) To UBound(vQuelle)
sQuelle = vQuelle(iQuelle)
Application.StatusBar = "Datei " & iQuelle & " von " & UBound(vQuelle) _
& " (" & sQuelle & ") wird ausgewertet"
'    MsgBox sQuelle, vbInformation + vbOKOnly, "Nächste auszuwertende Datei"
'Prüfen, ob Quelldatei schon geöffnet
If fncCheckWorkbook(strWorkbookName:=Mid(sQuelle, InStrRev(sQuelle, "\") + 1)) = True Then
bQuelleOpen = True
Set wbQuelle = Workbooks(Mid(sQuelle, InStrRev(sQuelle, "\") + 1))
Else
'Quelldatei öffnen
bQuelleOpen = False
Set wbQuelle = Workbooks.Open(Filename:=sQuelle, ReadOnly:=True)
End If
'Quelltabelle mit ggf. auszulesenden Daten setzen
Set wksQuelle = wbQuelle.Worksheets(1)        'ggf. Indexnummer oder Name in _
Anführungszeichen anpassen
With wksQuelle
'Letzte Datenzeile in Quelltabelle
ZeileQuelle = .Cells(.Rows.Count, lSpalteID_Quelle).End(xlUp).Row
For ZeileQuelle = 11 To ZeileQuelle
'Such-Werte aus Zeile in Quelltabelle einlesen
vSchluessel = .Cells(ZeileQuelle, lSpalteID_Quelle)
If vSchluessel  "" Then
'ID in Zieltabelle in Schlüsselspalte suchen
Set Zelle = rngID_Ziel.Find(what:=vSchluessel, LookIn:=xlValues, lookat:=xlWhole)
If Zelle Is Nothing Then
'ID in Ziel nicht vorhanden
MsgBox "ID " & vSchluessel & " in Datei """ & wbQuelle.Name _
& """ in der Zieltabelle nicht vorhanden!", vbInformation + vbOKOnly, _
"Gesamt-Ergebnisliste aktualisieren"
Else
ZeileZiel = Zelle.Row
'Daten aus Quelle in Spalte AN (40) in Ziel in Spalte L (12) eintragen
wksZiel.Cells(ZeileZiel, 12).Value = .Cells(ZeileQuelle, 40).Value
'usw.
End If
End If
Next
End With
'Quelldatei ggf. wieder schliessen
If bQuelleOpen = False Then wbQuelle.Close savechanges:=False
Next
wbZiel.Activate
Application.StatusBar = False
Application.ScreenUpdating = True
Application.EnableEvents = True
MsgBox "Gesamt-Ergebnisliste fertig", vbInformation + vbOKOnly, "Einlesen Ergebnisse"
End Sub
Function fncCheckWorkbook(strWorkbookName As String) As Boolean
'Prüft, ob Arbeitsmappe schon geöffnet
Dim wb As Workbook
For Each wb In Workbooks
If LCase(wb.Name) = LCase(strWorkbookName) Then
fncCheckWorkbook = True
Exit For
End If
Next
End Function

Anzeige
AW: Daten in mehreren Arbeitsmappen suchen
14.11.2010 12:46:13
Klaus
Hallo Franz,
die Dateien in denen die Plazierungen berechnet werden haben unterschiedliche Größen, denn die Teilnehmerzahlen in den einzelnen Gruppen und Klassen können zwischen 4 und 12 betragen. Daher sind die Spalten in denen die Platzziffern berechnet sind unterschiedlich.
Ich stellte mir vor, dass jede Berechnungsdatei ein entsprechend angepasstes Makro erhält, welches die Platzziffern anhand der Start(ID)Nummern in die Teilnehmerdatei überträgt, wodurch sich eine Abfrage aller Berechnungsdateien erübrigen würde.
Ist das machbar?
Gruß, Klaus
AW: Daten in mehreren Arbeitsmappen suchen
15.11.2010 10:34:25
fcs
Hallo Klaus,
machbar ist vieles. Nur hab ich keine Lust von einem Fragenden immer neue Anforderungen genannt zu bekommen, nach denen man wieder vieles umstricken muss.
Hier noch eine meiner meiner Meinung nach sinnvollerere Lösung die in der Gesamtliste einzurichten ist.
Die Variationen der Zellenbereiche in den einzelnen Ergebnistabellen werden in einem separaten Tabellenblatt eingegeben.
Gruß
Franz
https://www.herber.de/bbs/user/72296.zip
Anzeige
AW: Daten in mehreren Arbeitsmappen suchen
15.11.2010 13:33:55
Rudi
Hallo Franz,
zum ersten, ja Klaus und ich sind die beiden, die die Tabellen erstellen.
Die Anfrage war von meiner Tabelle aus.
Noch etwas:
Das einlesen der Daten ist nicht iimer aus den selben Zellen.
Das schreiben der Daten ist immer in die gleiche Spalte.
In: Teilnehmer.xls
In Tabellenblatt: Liste
Stimmt das so, wie ich es in dem Macro geändert habe?
Set wbZiel = Workbooks("Teilnehmer.xls") 'oder = ActiveWorkbook 'Name anpassen!
Set wksZiel = wbZiel.Worksheets("Liste") 'Name - anpassen
Was soll das folgende bedeuten, was soll da eingegeben werden?
Ist das für die Datei (Teilnehmer.XLS), in die die Daten geschrieben werden sollen?
'Nrn. der Schlüsselspalten
lSpalteID_Ziel = 1 'Spalte A - ggf Anpassen
lSpalteID_Quelle = 3 'Spalte, sollte in allen Ergebnistabellen identisch sein - ggf Anpassen
Ich habe keine Ahnung von VBA.
Habe ich mein Wunsch nicht gut genug beschrieben?
Gruß Rüdiger
Anzeige
AW: Daten in mehreren Arbeitsmappen suchen
15.11.2010 16:21:55
fcs
Hallo Rudi und Klaus,
ich hab schon verstanden was ihr wollt.
Es ist aber nicht so besonders produktiv, wenn zur gleichen Fragestelltung 2 Threads von verschiedenen Usern eröffnet werden. Denn das ist für Antwordende extrem frustrierend.
Ich hatte zunächst Klaus's allgemeine Frage allgemein beantwortet.
Dann die Nachfrage von Klaus: Ich hab aber mehrere Dateien, deren Inhalt in die Gesamtliste übernommen werden sollen.
Ich hatte meine allgemeine Makroversion entsprechend erweitert.
Dann die Antwort von Klaus: Die Daten in den Einzelergebnis-Dateien stehen nicht immer in den selben Spalten und das Makro soll doch bitte in den Einzelergebnis-Dateien angelegt werden.
Parallel dazu dann die 2. Frage von Rudi mit dem Makro aus einer anderen Quelle.
Das ist dann schon frustrierend.
Was deine weiteren Fragen angeht:
Die Objekte für die Zieldatei und Zieltabelle scheinen korrekt zugewiesen zu sein.
Was soll das folgende bedeuten, was soll da eingegeben werden?
Ist das für die Datei (Teilnehmer.XLS), in die die Daten geschrieben werden sollen?
'Nrn. der Schlüsselspalten
lSpalteID_Ziel = 1 'Spalte A - ggf Anpassen
lSpalteID_Quelle = 3 'Spalte, sollte in allen Ergebnistabellen identisch sein - ggf Anpassen

Wie die Variablen-Namen andeuten:
lSpalteID_Ziel bezieht sich auf die Spalte mit der ID-Nummer in der Zieltabelle (Liste in Teilnehmerliste)
lSpalteID_Quelle bezieht sich auf die Spalte mit der ID-Nummer in der Quelltabelle
Ich habe keine Ahnung von VBA.
Dann solltest du dich ggf. ein klein wenig mehr damit beschäfftigen. Ansonsten sind in meinen Code-Beispielen doch ausreichend Kommentare enthalten, dass auch jemand, der mit VBA nicht so bewandert ist, die Funktionen/Aktionne im Makro nachvollziehen können sollte. Bei unbekannten englischsprachigen Funktionen/Methoden gibt es ja auch noch die F1-Taste, um sich Informationen zu beschaffen.
Gruß
Franz
Anzeige
AW: Daten in mehreren Arbeitsmappen suchen
16.11.2010 10:21:00
Rudi
Hallo Franz,
wir meinen beide das selbe.
Nur drücken wir uns etwas anders aus.
Ich habe das mit der F1 Taste gemacht und es kamen auch Erklährungen dazu, nur die verstehe ich genauso wenig wie VBA.
Ich verstehe das mit dem VBA nicht und für das eine mal, wo ich das brauche möche ich es nicht lernen.
Wenn ich etwas in VBA bekomme und der Kommentar am Ende der Zeile steht, kann ich es mir soweit abändern.
Bitte sei so lieb und lies mein Anliegen noch mals durch und helfe mir.
Ich muß natürlich auch wissen, wo genau ich etwas abändern soll.
Denke bitte daran, dass es nicht nur eine Datei mit bestimmten Zellen gibt die ausgelesen werden sollen.
Es gibt 19 verschieden Dateien an die ich dann das Macro anpassen möchte.
Ich hoffe, dass Du mir behilflich bist.
Hier nochmals meine abgeänderte Anfrage!
Hallo, ich habe ein Problem!
Ich möchte, dass ein Macro folgendes macht:
Es soll von der Datei "C:\RSC 2011\Doppel_5er_4_Gruppen.xls" Zellen auslesen, die Datei "C:/RSC 2011/Teilnehmer.xls" öffen und die gelesenen Daten reinschreiben und die Datei "C:/RSC 2011/Teilnehmer.xls"wieder schließen.
Die Daten sind z. B. in der genannten Datei und sollen in die folgende Datei geschrieben:
Lesen aus der Datei C:\RSC 2011\Doppel_5er_4_Gruppen.xls, Arbeitsblatt "Endspiel":
Die ID_Nr = steht in BG30:BG32, der dazugehörige Platz steht in der Spalte BC30:BC32.
(Die fett geschriebenen Zellen sind nur bei der oben angegebenen Datei gültig)
Bitte schreib mir als Kommentar an das Ende der Zeile wo ich genau die Zellen ändern ändern muß, damit das Macro, bei einer anderen Datei die zu kopierenden Zellen findet!
Jetzt soll das Macro die Datei "C:/RSC 2011/Teilnehmer.xls" öffnenen, die ID_Nr suchen, die in der Spalte A steht und soll den Platz in die Zeile der gefundenen ID_Nr, in die Spalte L schreiben und die Datei "C:/RSC 2011/Teilnehmer.xls"wieder schließen.
Das war eigentlich schon alles, nur noch etwas, bitte schreibe mir in das Macro, hinter den jeweiligen Befehl, der die jeweiligen Daten aus der Datei "C:\RSC 2011\Doppel_5er_4_Gruppen.xls" ausliest, wie ich dies ändern kann, da es noch 19 andere Dateien gibt, wo die Daten in anderen Zellen sind aber immer in die Datei "C:\RSC 2011\Teilnehmer.xls" in die selben Spalten gesucht und geschrieben werden sollen!
Es wird dann jedes Macro individuell für jede Datei angepasst.
Ich hoffe, ich habe mein Anliegen verständlich geschrieben!
Vielen lieben Dank schon mal von Rüdiger
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige