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

Datenimport aus anderen Excel-Tabellen

Datenimport aus anderen Excel-Tabellen
05.01.2015 07:02:36
Martin
Hallo zusammen,
In einer Summendatei möchte ich Werte aus anderen Excel-Tabellen übernehmen. Der Name der Datei setzt sich aus dem Mitgliedsnamen zusammen, der Wert steht immer in einer bestimmten Zelle der Quelldatei. Die Quelldateien sollen dabei im Unterordner Punktelisten stehen. Zum Beispiel so:
'D:\Users\Downloads\Punktelisten\[Punkteliste_Mister_Muster_2015.xls]Punkteblatt'!$D$3
Es handelt sich um ca. 150 Mitglieder, die in der Summendatei untereinander stehen. In Spalte A steht der Nachname, in Spalte B der Vorname. Nun habe ich mit der folgenden Formel (in Spalte C) geschafft, das Ganze variabel zu gestalten:
="'"&LINKS(ZELLE("Dateiname";$A$1);FINDEN("[";ZELLE("Dateiname";$A$1))-2)&"\Punktelisten\[Punkteliste_"&$B2&"_"&$A2&"_"&TEIL(ZELLE("Dateiname";$A$1);FINDEN(".xls";ZELLE("Dateiname";$A$2);1)-4;4)&".xls]Punkteblatt'!§D§3"
Indirekt funktioniert ja leider nicht bei geschlossenen Dateien. Ebenso befürchte ich, dass SVERWEIS bzw. INDEX/VERGLEICH bei variablem Dateinamen nicht funktioniert (Bitte korrigiert mich, falls doch!).
In meinen Augen könnte dies ganz gut mit einem Makro funktionieren, dass bei Öffnen der Summendatei ausgeführt wird. Allerdings kann ich mit VBA-Makros nicht so recht. Könnt Ihr mir ein Makro zurechtstellen?
Danke und Grüße
Martin

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tippfehler
05.01.2015 09:59:47
Martin
Wie ich gerade festgestellt habe schrieb ich §D§3, gemeint ist natürlich $D$3
:-)

AW: Tippfehler
05.01.2015 10:29:33
Dieter
Hallo Martin,
du kannst das mit dem folgenden Makro machen
Sub Übernehmen()
Dim datei As String
Dim fso As FileSystemObject
Dim letzteZeile As Long
Dim pfad As String
Dim verzPL As String
Dim wb As Workbook
Dim wsP As Worksheet  ' Punkteblatt
Dim wsS As Worksheet  ' Summenblatt
Dim zeile As Long
Application.ScreenUpdating = False
pfad = ThisWorkbook.Path & "\"
verzPL = pfad & "Punktelisten\"
Set fso = New FileSystemObject
If Not fso.FolderExists(verzPL) Then
MsgBox verzPL & " existiert nicht"
GoTo Ende
End If
Set wsS = ThisWorkbook.Worksheets(1)
letzteZeile = wsS.Cells(wsS.Rows.Count, "A").End(xlUp).Row
If letzteZeile 
Die zugehörige Datei findest du hier
https://www.herber.de/bbs/user/94753.xls
Viele Grüße
Dieter

Anzeige
AW: Tippfehler
05.01.2015 11:04:53
Martin
Hallo Dieter,
vielen Dank für die schnelle Lösung. Das funktioniert sehr gut. Geht das auch ohne Öffnen/Schließen der Datei? Aufgrund einer Formel in den Dateien fragt Excel beim Schließen immer, ob die Änderungen gespeichert werden soll. Das ist bei 150 Dateien recht nervig.
Vielleicht lassen sich die Dateien per Makro auch read-only öffnen, wodurch die Frage nach der Speicherung nicht kommt.
Im schlimmsten Fall muss ich meine Formeln so anpassen, dass die Frage nicht jedes Mal kommt.
Im Anschluss möchte ich in die Spalten D, E & F noch weitere Daten entnehmen, allerdings müssen hier Kürzungen vorgenommen werden:
=RECHTS(A1;LÄNGE(A1)-6)
=RECHTS(A2;LÄNGE(A2)-5)
=RECHTS(A3;LÄNGE(A3)-6)
Der Versuch wsS.Cells(zeile, "D") = wsP.Range("A1") hat funktioniert, mit Einbindung der Formel wsS.Cells(zeile, "D") = wsP.Range("=RECHTS(A1;LÄNGE(A1)-6)") allerdings nicht. Kannst Du mir das Makro noch um die drei Zeilen erweitern?
Danke und Grüße
Martin

Anzeige
>>wb.Close SaveChanges:=False (owT)
05.01.2015 11:23:56
EtoPHG

Gelöst - auch Längenkürzung
05.01.2015 12:58:46
Martin
Vielen Dank an alle Beteiligten. Die Hilfe war wieder sehr gut.
Wegen der Kürzung der Werte habe ich noch folgende Formeln im www gefunden:
wsS.Cells(zeile, "D") = Right(wsP.Range("A1"), 22)
wsS.Cells(zeile, "E") = Right(wsP.Range("A2"), 11)
wsS.Cells(zeile, "F") = Right(wsP.Range("A3"), Len(wsP.Range("A3")) - 6)

AW: Tippfehler
05.01.2015 11:27:38
Rudi
Hallo,
einfach
wb.Close false
Gruß
Rudi

AW: Tippfehler
05.01.2015 13:06:01
Dieter
Hallo Martin,
das Problem mit Close ist ja durch den zusätzichen Paratemeter schon gelöst.
Um die weiteren Daten zu übernehmen kannst du folgendes schreiben:
Sub Übernehmen()
Dim datei As String
Dim fso As FileSystemObject
Dim letzteZeile As Long
Dim pfad As String
Dim verzPL As String
Dim wb As Workbook
Dim wsP As Worksheet  ' Punkteblatt
Dim wsS As Worksheet  ' Summenblatt
Dim zeile As Long
Dim zf As String
Application.ScreenUpdating = False
pfad = ThisWorkbook.Path & "\"
verzPL = pfad & "Punktelisten\"
Set fso = New FileSystemObject
If Not fso.FolderExists(verzPL) Then
MsgBox verzPL & " existiert nicht"
GoTo Ende
End If
Set wsS = ThisWorkbook.Worksheets(1)
letzteZeile = wsS.Cells(wsS.Rows.Count, "A").End(xlUp).Row
If letzteZeile  6 Then
wsS.Cells(zeile, "D") = Right$(zf, Len(zf) - 6)
End If
zf = wsP.Range("A2")
If Len(zf) > 5 Then
wsS.Cells(zeile, "E") = Right$(zf, Len(zf) - 5)
End If
zf = wsP.Range("A3")
If Len(zf) > 6 Then
wsS.Cells(zeile, "F") = Right$(zf, Len(zf) - 6)
End If
End If
wb.Close SaveChanges:=False
End If
Next zeile
Ende:
Application.ScreenUpdating = True
Application.StatusBar = Empty
End Sub
Viele Grüße
Dieter
Anzeige

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige