Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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 - Zellen aus anderen Exceldateien auslesen

Frage Microsoft Microsoft Office

Mitglied: Cubic83

Cubic83 (Level 2) - Jetzt verbinden

05.01.2015 um 18:54 Uhr, 3536 Aufrufe, 10 Kommentare

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:

01.
 
02.
	A	B	C	D 
03.
 
04.
1	file1	100 
05.
 
06.
2	file2   200 
07.
 
08.
3	file3	300 
09.
 
10.
4	file4	400 
11.
 
In Spalte A steht der Dateiname und in Spalte B soll der Wert aus Zelle A der jeweiligen Datei kommen. Mit dem Befehl

01.
 
02.
='C:\Test\[file1.xlsx]Sheet1'!A1 
03.
 
klappt das genauso wie ich das Möchte. Ändere ich aber die Formel um in etwa:

01.
 
02.
='C:\Test\[$A1.xlsx]Sheet1'!A1 
03.
 
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
Mitglied: 119478
05.01.2015, aktualisiert um 19:42 Uhr
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
Bitte warten ..
Mitglied: Cubic83
05.01.2015, aktualisiert um 19:46 Uhr
Hallo und danke für dein Feedback.

Also INDIRECT funktionniert nur wenn die Datei geöffnet ist. Das ist bei mehreren hundert Dateien nicht wirklich eine Lösung.

Der Dateiname ist aufgebaut nach dem Prinzip:

benutzername.xlsx - Also den Benutzernamen bei uns im Netzwerk.

Mit freundlichen Grüßen


PS: Du hast dein Post noch verändert, ich war zu schnell ;)

Ich habe tatsächlich schon mit Text probiert. Er ersetzt die Variablen auch richtig (zeigt mir also an, wie die Zeile aussieht), führt den Befehl dann aber nicht mehr aus sprich: Er schreibt nur in die Zeile hinein =C:\Test\file1.xlsx, etc...
Bitte warten ..
Mitglied: 114757
LÖSUNG 05.01.2015, aktualisiert 06.01.2015
Moin,
"indirekt" kann wie gesagt nur mit geöffneten Arbeitsmappen umgehen, am besten man macht das über eine Makrofunktion
01.
Function getValue(rngName as Range)  
02.
    strParam = "'C:\Test\[" & rngName.Value & "]Sheet1'!R1C1" 
03.
    getValue = ExecuteExcel4Macro(strParam) 
04.
End Function  
Dann schreibt man in die Zelle B1 folgendes
01.
=getValue(A1)
und kopiert die Formel nach unten, feddich.

Gruß jodel32

p.s. siehe auch folgenden Thread in dem das schon diskutiert wurde
http://www.administrator.de/forum/vba-mehrere-zellen-aus-anderer-datei- ...
Bitte warten ..
Mitglied: MarxMoritz
05.01.2015 um 22:08 Uhr
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
Bitte warten ..
Mitglied: Cubic83
06.01.2015 um 09:38 Uhr
Hallo,

funktionniert leider nicht. Bekomme nur den Fehler #VALUE.

Mit MsgBox strParam bekomme ich den korrekten String ('C:\Test\[file1.xlsx]Sheet1'!A1) angezeigt. Das Zusammenbauen klappt also.

Den Link aus dem Forum hier kannte ich nicht. Reduziert läuft es ja auch auf ein ExecuteExcel4Macro('C:\Test\[file1.xlsx]Sheet1'!A1) hinaus.

Komisch.
Bitte warten ..
Mitglied: 114757
06.01.2015, aktualisiert um 10:30 Uhr
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
Bitte warten ..
Mitglied: Cubic83
06.01.2015 um 10:36 Uhr
Hatte ich schon gemacht.

Hier nochmal meine ganze Funktion in der aktuellen Version

01.
 
02.
Function GetValue(rngName As Range) As Variant 
03.
    strParam = "'C:\test\[" & rngName.Value & "]Sheet1'!R1C1" 
04.
    'MsgBox strParam 
05.
    GetValue = ExecuteExcel4Macro(strParam) 
06.
End Function 
07.
 
Aufgerufen wird die Funktion mit =GetValue(A4). In A4 steht file1.xlsx.

Ich habe es inzwischen auf einem Office 2010 und 2013 probiert. Nicht dass es damit zu tun hat. Ist aber überall das gleiche.


"du musst die Zelle A1 in R1C1 Schreibweise schreiben, siehe korrigierten Code oben, der läuft hier einwandfrei."

Hast du das denn mit einer Funktion probiert oder nur in die Zelle eingetragen?
Bitte warten ..
Mitglied: Cubic83
06.01.2015 um 10:45 Uhr
Hallo,

das ist nicht ganz was is suche. Du geht das ganze Verzeichniss durch. Ich habe aber vordefinierte Dateien.

Ausserdem geht bei dieser Variante (wenn ich richtig verstehe) Excel immer auf.

Danke,
mfG
Bitte warten ..
Mitglied: colinardo
LÖSUNG 06.01.2015, aktualisiert um 11:27 Uhr
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:
01.
Function getValue(rngName As Range) As Variant 
02.
    strParam = "'C:\Test\[" & rngName.Value & "]Sheet1'!R1C1" 
03.
    getValue = ExecuteExcel4Macro(strParam) 
04.
End Function 
05.
 
06.
Sub WriteValuesToCells() 
07.
    For Each cell In ActiveSheet.Range("B1:B10") 
08.
        cell.Value = getValue(cell.Offset(0, -1)) 
09.
    Next 
10.
End Sub
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
Bitte warten ..
Mitglied: Cubic83
06.01.2015 um 11:27 Uhr
Das wars! Funktionniert jetzt.

Vielen lieben Dank!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Fenstertitel von anderen Tasks per batch auslesen (3)

Frage von NetMare zum Thema Batch & Shell ...

Microsoft Office
gelöst Inhalte vieler excel dateien auslesen und als Liste wiedergeben (13)

Frage von tw3aker zum Thema Microsoft Office ...

Microsoft Office
gelöst VBA zum auslesen von einem Zellbereich Excel (1)

Frage von schwalbepilot zum Thema Microsoft Office ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(7)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte