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, 3362 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: bensat
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,
Mit freundlichen Grüßen
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 ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
Excel VBA XML-Nodes auslesen (4)

Frage von chef1568 zum Thema VB for Applications ...

VB for Applications
gelöst Excel VBA Eine oder mehrere Zellen Verschieben (2)

Frage von batchnewbie zum Thema VB for Applications ...

Microsoft Office
gelöst Excel 2010 Zellen mit bestimmten Inhalt mit Makro formartierten (5)

Frage von packmann2016 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...