4.6k Aufrufe
Gefragt in Tabellenkalkulation von petra65 Experte (1.8k Punkte)
Hallo,

ich schon wieder - diese Tabelle macht mich so langsam "wahnsinnig" .... ich habe nämlich schon wieder ein Problem, folgendes:

Ich möchte zwecks Auswertung Daten aus anderen Tabellen in die Tabelle AUSWERTUNG holen,

In der Tabelle AUSWERTUNG befindet sich in
A9 die Zahl 1, in
A10 die Zahl 2,
usw.
es existierten in dem Ordnder User1 Tabellen, die heissen
1.xls,
2.xls,
usw..

Folgende Fomel funktioniert, erschwert mir aber die Arbeit sehr, da ich [1.xls] per Hand für die weiter unten stehenden Auswertungen ändern muss.

=WENN($A9="";0;WENN(UND($E$3='C:\..\..\..\..\..\..\User1.\[1.xls]Auswertung'!$A$8;$A9='C:\..\..\..\..\..\..\User1\[1.xls]Auswertung'!$E$3);'C:\..\..\..\..\..\..\User1\[1.xls]Auswertung'!$B$8))

Das heißt, ich möchte [1.xls] variabel halten, so dass beim kopieren der Formel nach unten die 1 hochzählt.

Ich habe bereits diverse Varianten ausprobiert,
\ZEILE()-8"!A1"&".xls"
\"$A9"&".xls"
mal mit runder, mal mit eckiger Klammer, mal mit Anführungszeichen oder mit Hochstrich ... leider ohne Erfolg.
Ich erhalte stets einen #BEZUG - Fehler.

Was kann ich statt [1.xls] einsetzen, so dass die Fomel funktioniert???

Hoffe auf Anregungen, viele Grüße
Petra

16 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo Petra,

das geht mit der Formel Indirekt(), aber dazu muss die Quelldatei auf sein.

Gruß Hajo
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Petra,

das ginge zwar unter Verwendung von INDIREKT(), wobei die Variable "1" z.B. in A1steht.....

=WENN($A9="";0;WENN(UND($E$3=INDIREKT("'C:\..\..\..\..\..\..\User1.\["&A1&".xls]Auswertung'!$A$8");$A9=INDIREKT("'C:\..\..\..\..\..\..\User1\["&A1"&".xls]Auswertung'!$E$3"));INDIREKT(
"'C:\..\..\..\..\..\..\User1\["& A1&".xls]Auswertung'!$B$8")))

......aber, bei diesem Unterfangen müssen alle beteiligten Arbeitsmappen geöffnet sein und das wirst Du wahrscheinlich nicht wollen.

Fazit:
Für dieses Unterfangen wirst Du wohl oder übel ein Makro schneidern müssen.

Gruß
Rainer
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
oh noooo ;-))))

Ich liebe Makros, die sind einfach fantastisch, doch die lieben mich nicht ;-)

Dann mache ich mir mal Gedanken, bemühe Google, und melde mich bestimmt nochmal...

Vielen Dank

Gruss
Petra
0 Punkte
Beantwortet von
Hallo Petra,
man kann mit einem Makro auch Werte abfragen, wenn die Quelldatei geschlossen ist.
Im Beispiel: Auswertung werden alle Werte aus dem Ordner (User1) von allen Dateien (xls) der Tabellen1 (A9) übertragen. Vorher den Pfad ändern.

Gruß
fedjo
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

hier ein wenig kuerzer :-))

gruss nighty

Option Explicit
Sub DateienLesen()
Dim DateiName As String
DateiName = Dir("C:\Temp1\" & "*.xls")
Do While DateiName <> ""
Range("A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1) = ExecuteExcel4Macro("'C:\Temp1\" & "[" & DateiName & "]Tabelle1" & "'!" & Range("A2").Address(, , xlR1C1))
DateiName = Dir
Loop
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

bereichs beispiel

gruss nighty

Option Explicit
Sub DateienLesen()
Dim DateiName As String, ZellPos As Variant
DateiName = Dir("C:\Temp1\" & "*.xls")
Do While DateiName <> ""
For Each ZellPos In Array("A1", "A2", "A3")
Range("A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1) = ExecuteExcel4Macro("'C:\Temp1\" & "[" & DateiName & "]Tabelle1" & "'!" & Range("" & ZellPos).Address(, , xlR1C1))
Next zelle
DateiName = Dir
Loop
End Sub


fuer groessere bereiche ungeeignet ^^
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
@ fedjo,

ist ja stark ... ;-) ... wenn ich nun genau wüßte WAS WO passiert, dann könnte ich den Code auch anpassen. Und leider erhalte ich die falschen Daten.

Ich möchte
in den Wert aus der Tabelle
D9 B8 1.xls
E9 C8 1.xls
F9 D8 1.xls
D10 B9 2.xls
E10 C9 2.xls
F10 D9 2.xls
usw. usw. usw.

Zur Vereinfachung hier mal 2 Test-Tabellen:
Tabelle 1.xls: www.file-upload.net/download-1859644/1.xls.html

Tabelle Auswertung: www.file-upload.net/download-1859651/Auswertung.xls.html

Ist sowas anpassbar??


@nighty,

bei mir passiert leider gar nichts .... auch keine Fehlermeldung.
Woran kann das liegen, habe den Pfad entsprechend angepaßt.

Viele Grüße
Petra
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
.. das sieht ja ... aus, Leerzeichen werden verschluckt,
es sollte so aussehen:

Ich möchte
in----- den Wert----- aus der Tabelle
D9------ B8---------------- 1.xls
E9------ C8---------------- 1.xls
F9-------D8---------------- 1.xls
D10---- B9---------------- 2.xls
E10---- C9---------------- 2.xls
F10---- D9---------------- 2.xls
usw. usw. usw.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein beispiel,nicht getestet(dateien werden geoeffnet)

gruss nighty

pfad wie quell und zieltabellennamen waeren anzupassen

Option Explicit
Sub DateienLesen()
Call EventsOff
Dim LZeile As Long
Dim SHerfassung As Integer, AIndex As Integer, EIndex As Integer
Dim DateiName As String, Meldung As String
DateiName = Dir("C:\Temp3\" & "*.xls")
EIndex = 9
AIndex = 8
Do While DateiName <> ""
If ThisWorkbook.Name <> DateiName Then
Workbooks.Open Filename:="C:\Temp3\" & DateiName
LZeile = ThisWorkbook.Worksheets("TabellenNamen").UsedRange.SpecialCells(xlCellTypeLastCell).Row + 1
ThisWorkbook.Worksheets("ZielTabelle").Range("A" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("D" & EIndex)
ThisWorkbook.Worksheets("ZielTabelle").Range("B" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("E" & EIndex)
ThisWorkbook.Worksheets("ZielTabelle").Range("C" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("F" & EIndex)
ThisWorkbook.Worksheets("ZielTabelle").Range("D" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("B" & AIndex)
ThisWorkbook.Worksheets("ZielTabelle").Range("E" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("C" & AIndex)
ThisWorkbook.Worksheets("ZielTabelle").Range("F" & LZeile) = Workbooks(DateiName).Worksheets("QuellTabelle").Range("D" & AIndex)
EIndex = EIndex + 1
AIndex = AIndex + 1
Workbooks(DateiName).Close SaveChanges:=False
End If
DateiName = Dir
Loop
Call EventsOn
End Sub

Public Sub EventsOff()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
End Sub

Public Sub EventsOn()
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub
0 Punkte
Beantwortet von petra65 Experte (1.8k Punkte)
Hallo,

nun versuche ich seit gestern den Code anzupassen - leider recht erfolglos, ich erhalte kein Ergebnis, aber auch keine Fehlmermeldung - daher einige Fragen zu dem Code:

...
... Dim .......
DateiName = Dir("C:\Temp3\" & "*.xls") 'Hier muss doch wohl der Pfad zu den einzelnen Tabellen hin, aus denen die Werte geholt werden sollen ??
EIndex = 9
AIndex = 8
Do While DateiName <> ""
If ThisWorkbook.Name <> DateiName Then
Workbooks.Open Filename:="C:\Temp3\" & DateiName ' Hier den gleichen Pfad ???

Zieltabelle ist die Tabelle, in die geschrieben wird??
(es wird in die Tabelle "Auswertung" in das Blatt "2008" geschrieben, muss ich das gesondert beachten?

Quelltabelle ist die Tabelle, aus der die Werte geholt werden?
(es ist z. B. die Tabelle 1.xls, das Blatt "Auswertung")

Kann hier der Fehler liegen, dass der Zugriff auf die Tabellen erfolgt, aber nicht auf die Blätter???

Vielen Dank erstmals ..

Gruss - Petra
...