Excel - Zellen aus anderen Exceldateien auslesen
Hallo,
ich stecke mal wieder bei einem Excel Problem fest und hoffe ihr könnt mir helfen.
Ich habe in einem Ordner C:\Test einen Haufen Excel Dateien:
C:\Test\file1.xlsx
C:\Test\file2.xlsx
In jeder dieser Dateien steht in der Zeile A1 ein Zahlenwert.
Nun habe ich eine weitere Excel-Datei wo ich diese Zellen gerne auslesen möchte. Diese Datei hat in etwa die Struktur:
In Spalte A steht der Dateiname und in Spalte B soll der Wert aus Zelle A der jeweiligen Datei kommen. Mit dem Befehl
klappt das genauso wie ich das Möchte. Ändere ich aber die Formel um in etwa:
ist das nicht mehr möglich. Ich habe inzwischen alle Version von Gänsefüschen etc durch, aber ich bekomme das einfach nicht hin.
Gibts da eine Möglichkeit?
Vielen Dank und mit freundlichen Grüssen,
Cubic83
ich stecke mal wieder bei einem Excel Problem fest und hoffe ihr könnt mir helfen.
Ich habe in einem Ordner C:\Test einen Haufen Excel Dateien:
C:\Test\file1.xlsx
C:\Test\file2.xlsx
In jeder dieser Dateien steht in der Zeile A1 ein Zahlenwert.
Nun habe ich eine weitere Excel-Datei wo ich diese Zellen gerne auslesen möchte. Diese Datei hat in etwa die Struktur:
A B C D
1 file1 100
2 file2 200
3 file3 300
4 file4 400
In Spalte A steht der Dateiname und in Spalte B soll der Wert aus Zelle A der jeweiligen Datei kommen. Mit dem Befehl
='C:\Test\[file1.xlsx]Sheet1'!A1
klappt das genauso wie ich das Möchte. Ändere ich aber die Formel um in etwa:
='C:\Test\[$A1.xlsx]Sheet1'!A1
ist das nicht mehr möglich. Ich habe inzwischen alle Version von Gänsefüschen etc durch, aber ich bekomme das einfach nicht hin.
Gibts da eine Möglichkeit?
Vielen Dank und mit freundlichen Grüssen,
Cubic83
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 258961
Url: https://administrator.de/contentid/258961
Ausgedruckt am: 03.12.2024 um 17:12 Uhr
10 Kommentare
Neuester Kommentar
Wenn ich mich richtig erinnere kann man solche Sachen mit der INDIRECT()-Funktion loesen. Schau mal obe es ueberhaupt notwendig ist.
Welche Form des Dateinamens waehlst Du denn in A! ? Ist das ein Datum oder aehnliches ? Darueber hinaus weiss Excel nicht das $A1.xlsx nicht der Dateiname sein soll.
Du musst also vorher mit TEXT(.......) eine Konvertierung des "Zellenwertes" aus $A1 vornehmen. Sowas wie :
='C:\Test\['TEXT(...................)'.xlsx] oder so aehnlich. Kann es momentan nicht ueberpruefen.
Hoffe es ist wenigstens ein Ansatz.
VG
Welche Form des Dateinamens waehlst Du denn in A! ? Ist das ein Datum oder aehnliches ? Darueber hinaus weiss Excel nicht das $A1.xlsx nicht der Dateiname sein soll.
Du musst also vorher mit TEXT(.......) eine Konvertierung des "Zellenwertes" aus $A1 vornehmen. Sowas wie :
='C:\Test\['TEXT(...................)'.xlsx] oder so aehnlich. Kann es momentan nicht ueberpruefen.
Hoffe es ist wenigstens ein Ansatz.
VG
Moin,
"indirekt" kann wie gesagt nur mit geöffneten Arbeitsmappen umgehen, am besten man macht das über eine Makrofunktion
Dann schreibt man in die Zelle B1 folgendes
und kopiert die Formel nach unten, feddich.
Gruß jodel32
p.s. siehe auch folgenden Thread in dem das schon diskutiert wurde
VBA: mehrere Zellen aus anderer Datei auslesen (ohne diese zu öffnen)
"indirekt" kann wie gesagt nur mit geöffneten Arbeitsmappen umgehen, am besten man macht das über eine Makrofunktion
Function getValue(rngName as Range)
strParam = "'C:\Test\[" & rngName.Value & "]Sheet1'!R1C1"
getValue = ExecuteExcel4Macro(strParam)
End Function
=getValue(A1)
Gruß jodel32
p.s. siehe auch folgenden Thread in dem das schon diskutiert wurde
VBA: mehrere Zellen aus anderer Datei auslesen (ohne diese zu öffnen)
Hallo,
probier das einmal! Das funktioniert!
Sub zellen_auslesen()
Dim strDatei As String, strPfad As String, strTyp As String
Dim wbX As Workbook, wksX As Worksheet, wksN As Worksheet
Dim lngCount As Long
Application.ScreenUpdating = False
strPfad = "C:\test" 'Pfad anpassen
strTyp = "xls" 'Dateityp anpassen
Set wksN = ThisWorkbook.Sheets(1) 'Zieltabelle
lngCount = 3 'Startzeile in der Zieltabelle
wksN.Range(wksN.Rows(lngCount), wksN.Rows(wksN.UsedRange.Rows.Count + lngCount)).Delete
strDatei = Dir(strPfad & "\*." & strTyp)
Do Until strDatei = ""
Set wbX = Workbooks.Open(strPfad & "\" & strDatei)
Set wksX = wbX.Sheets(1)
strDatei = Left(strDatei, Len(strDatei) - 4)
wksN.Cells(lngCount, 1) = strDatei
wksN.Cells(lngCount, 2) = wksX.Cells(1, 1)
lngCount = lngCount + 1
wbX.Close False
strDatei = Dir
Loop
Application.ScreenUpdating = True
End Sub
Grüße
probier das einmal! Das funktioniert!
Sub zellen_auslesen()
Dim strDatei As String, strPfad As String, strTyp As String
Dim wbX As Workbook, wksX As Worksheet, wksN As Worksheet
Dim lngCount As Long
Application.ScreenUpdating = False
strPfad = "C:\test" 'Pfad anpassen
strTyp = "xls" 'Dateityp anpassen
Set wksN = ThisWorkbook.Sheets(1) 'Zieltabelle
lngCount = 3 'Startzeile in der Zieltabelle
wksN.Range(wksN.Rows(lngCount), wksN.Rows(wksN.UsedRange.Rows.Count + lngCount)).Delete
strDatei = Dir(strPfad & "\*." & strTyp)
Do Until strDatei = ""
Set wbX = Workbooks.Open(strPfad & "\" & strDatei)
Set wksX = wbX.Sheets(1)
strDatei = Left(strDatei, Len(strDatei) - 4)
wksN.Cells(lngCount, 1) = strDatei
wksN.Cells(lngCount, 2) = wksX.Cells(1, 1)
lngCount = lngCount + 1
wbX.Close False
strDatei = Dir
Loop
Application.ScreenUpdating = True
End Sub
Grüße
funktionniert leider nicht. Bekomme nur den Fehler #VALUE.
Du musst die Zelle A1 in R1C1 Schreibweise schreiben, siehe korrigierten Code oben(hatte ich noch editiert), der läuft hier problemlos.Gruß jodel32
Hallo zusammen,
die Funktion ExecuteExcel4Macro funktioniert nur innerhalb von Makros, nicht innerhalb einer Funktion die einen Wert an das Sheet zurückgegeben soll!! Du musst also den Wert aus dem Makro in die Zellen schreiben, so wie es in dem obigen Link von mir gemacht wird.
Also Beispielsweise so:
Die Prozedur WriteValuesToCells() lässt sich ja dann z.B. nach belieben aus einem Event von Excel aufrufen (Workbook_Open / Worksheet_Change), je nachdem wie oft es aktualisiert werden soll.
Grüße Uwe
die Funktion ExecuteExcel4Macro funktioniert nur innerhalb von Makros, nicht innerhalb einer Funktion die einen Wert an das Sheet zurückgegeben soll!! Du musst also den Wert aus dem Makro in die Zellen schreiben, so wie es in dem obigen Link von mir gemacht wird.
Also Beispielsweise so:
Function getValue(rngName As Range) As Variant
strParam = "'C:\Test\[" & rngName.Value & "]Sheet1'!R1C1"
getValue = ExecuteExcel4Macro(strParam)
End Function
Sub WriteValuesToCells()
For Each cell In ActiveSheet.Range("B1:B10")
cell.Value = getValue(cell.Offset(0, -1))
Next
End Sub
Grüße Uwe