Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Cubic83

Cubic83 (Level 2) - Jetzt verbinden

05.01.2015 um 18:54 Uhr, 4036 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
https://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
VB for Applications

Zellen aus anderer Excel-Mappe mit vba auslesen

gelöst Frage von speedy132VB for Applications3 Kommentare

Hallo zusammen, Ich habe eine Arbeitsmappe in der ich Werte aus einer anderen geschlossenen Arbeitsmappe auslesen möchte. Das ganze ...

Microsoft Office

Einzelne Zellen einer Exceldatei automatisch in eine andere kopieren

gelöst Frage von BerndVorwerkMicrosoft Office2 Kommentare

Hallo an alle, ich habe ein Problem, bei dem ihr mir hoffentlich helfen könnt. Es existiert bei uns eine ...

Microsoft Office

Excel: Einzelne Zeilen einer mehrzeiligen Zelle auslesen

gelöst Frage von Booster07Microsoft Office3 Kommentare

Hallo zusammen, ich habe folgendes Problem und hoffe auf Eure Hilfe. Vereinfachtes Beispiel: Zelle A1 ist zum mehrzeilig (Zeilenumbrüche ...

Microsoft Office

Excel - Werte bestimmter Zellen nach definierter Suche auslesen

gelöst Frage von Excel-StarterMicrosoft Office7 Kommentare

Hallo zusammen, ich bräuchte wieder einmal eure Hilfe für folgende Excelauswertung: Aus einer Lagerbestandsliste sollen jeweils für einen Artikel ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 12 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 22 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...