Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1424to1428
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Feldwerte in Liste aufführen

Feldwerte in Liste aufführen
09.05.2015 20:17:40
Sunny
Liebe Excel-Profis
Ich benötige Eure Hilfe.
Ich habe eine Arbeitsmappe mit vielen Blättern.
Nun möchte ich einen bestimmten Zellinhalt aus allen Blättern (Zahl, steht in jedem Blatt in C33) holen lassen und in einem neuen Blatt als Liste aufführen.
Ich hoffe ich habe mein Problem einigermassen verständlich formuliert.
Konkret habe ich in jedem Blatt in Zell C33 einen Artikelpreis stehen und möchte nun eine Liste mit allen einzelnen Artikelpreisen.
Kann mir jemand helfen?
Vielen dank im Voraus!
Sunny

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das geht mit INDIREKT recht einfach, ...
09.05.2015 21:13:28
Luc:-?
…Sunny,
wenn die Blätter alle den gleichen, flfd nummerierten Namen haben:
=INDIREKT("Tabelle"&ZEILE(A1)&"!C33")
Falls die Zelle auch auf evtl, überall gleiche PositionsÄnderungen reagieren soll, dann so:
=INDIREKT("Tabelle"&ZEILE(A1)&"!"&ADRESSE(ZEILE($C$33);SPALTE($C$33)))
Haben die Blätter unterschiedliche Namen, musst du eine Liste dieser Namen erstellen und in der Fml auf diese verweisen:
=INDIREKT(INDEX(blattnamenslistenbereich;ZEILE(A1)&"!C33")
bzw analog für den 2.Fall.
Gruß, Luc :-?

AW: Das geht mit INDIREKT recht einfach, ...
09.05.2015 21:47:14
Sunny
Hallo Luc
Vielen Dank für Deine Nachricht.
Alle Blätter (ca. 150) haben einen anderen Namen.
Das Erstellen einer Liste mit den Blattname wäre sehr zeitaufwändig.
Gibt es eine anderen Weg? Könnte ich die Blätter automatisch umbenennen?
Liebe Grüsse
Sunny

Anzeige
Anderer Vorschlag: Automatik geht nur mit VBA, ...
10.05.2015 02:47:49
Luc:-?
…Sunny;
dann kannst du auch gleich die realen BlattNamen mit einer sog UDF (eigene Fkt) ermitteln und in die Fml einbauen. Die verschiedenen prinzipiellen Fml­Möglich­keiten (vgl unten!) kannst du hier sehen:
 ABCDEF
125,9925,99Formeln   
213,7813,78A1:A3: {=N(INDIREKT("'"&ShName(ZEILE(1:3))&"'!C33"))}
336,4936,49B1[:B3]:=INDIREKT("'"&ShName(ZEILE(A1))&"'!C33")
413,7836,49A4:B4: {=N(INDIREKT("'"&ShName(SPALTE(B:C))&"'!C33"))}
513,7836,49A5[:B5]:=INDIREKT("'"&ShName(SPALTE(B1))&"'!C33")
625,9925,99A6:A7: {=N(INDIREKT("'"&ShName({1;3})&"'!C33"))}
736,4936,49B6[:B7]:=INDIREKT("'"&ShName(INDEX({1;3};ZEILE(A1)))&"'!C33")
825,9936,49A8:B8: {=N(INDIREKT("'"&ShName({1.3})&"'!C33"))}
925,9936,49A9[:B9]:=INDIREKT("'"&ShName(INDEX({1.3};SPALTE(A1)))&"'!C33")
Die Blauen sind mehrzellige MatrixFmln (besondere Eingabe, ggf in der Xl-Hilfe nachlesen).
Dazu musst du nur ein normales Modul in das im VBEditor gezeigte VBA-Projekt der Mappe einfügen und darin folgendes Pgm eintragen:
Rem Mxfml-fähige Fkt ermittelt BlattNamen aktMappe lt Vorgabe lfd Nrn
'   Arg1: Einzel-RhfolgeNr bzw Vektor solcher Nrn, auch unzusammhängd
'   als MxKonstante, ohne Arg1 wird d.Name d.letzt Blattes ermittelt.
'   Vs1.0 -LSr -cd:20150509 -1pub:20150510herber -lupd:20150509n
Function ShName(Optional ByVal lfdNr)
Dim isVert As Boolean, aZr As Long, lZr As Long, shN() As String
On Error Resume Next
With ActiveWorkbook
If IsArray(lfdNr) Then
If IsError(LBound(lfdNr, 2)) Then
Else: Let isVert = UBound(lfdNr, 2) = 1
If Not isVert Then
lfdNr = WorksheetFunction.Transpose(lfdNr)
End If
lfdNr = WorksheetFunction.Transpose(lfdNr)
End If
aZr = LBound(lfdNr): lZr = UBound(lfdNr) - aZr
ReDim shN(lZr)
For lZr = 0 To lZr
shN(lZr) = .Sheets(lfdNr(aZr + lZr)).Name
Next lZr
If isVert Then
ShName = WorksheetFunction.Transpose(shN)
Else: ShName = shN
End If
ElseIf IsMissing(lfdNr) Then
ShName = .Sheets(.Sheets.Count).Name
Else: ShName = .Sheets(lfdNr).Name
End If
End With
End Function
Das Pgm ruft alle Blätter lt Argument lfdNr einzeln in ihrer Reihen­folge in der aktuellen Mappe auf. Diese können auch als Intervall (mit ZEILE/SPALTE) oder als Liste ein­zelner Nrn in Form eines Matrix­Kon­stanten­Vektors ange­geben wdn. Auf diese Weise können irrele­vante Blätter ausge­lassen wdn. Die Wieder­gabe­Orien­tie­rung mehr­zel­liger Matrix­Fmln richtet sich nach der Aus­rich­tungs­Form des Argu­ments.
Die Datei muss als .xlsm bzw .xlsb gespeichert wdn. Als .xlsx kann sie nur gespeichert wdn, wenn die UDF in eine stets geöffnete externe Datei ausgelagert wird, idealer­weise ein MS-Office-AddIn (Infos dazu im Archiv).
Gruß + schöSo, Luc :-?

Anzeige
hier meine Variante
10.05.2015 03:14:37
Matthias
Hi
Ich habs für mich mal so umgesetzt

Option Explicit
Sub Liste()
Dim x&, i&
i = 1
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "Liste"
For x = 1 To Worksheets.Count
If Worksheets(x).Name  "Liste" Then
Worksheets("Liste").Cells(i, 1) = Worksheets(x).Name
Worksheets("Liste").Cells(i, 2) = Worksheets(x).Cells(33, 3)
i = i + 1
End If
Next
End Sub
Hier noch ohne Fehlerbehandlung!
Mit Fehlerbhandlung würde ich das Blatt "Liste" löschen und dann neu erstellen.
So, nun beginnt die "Augenpflege" ;-)
Gute n8
Gruß Matthias

Anzeige
Dito, Matti! SchöSo! owT
10.05.2015 03:27:57
Luc:-?
:-?

AW: hier meine Variante
10.05.2015 14:14:07
Daniel
Hi
ich würde zumindest den Zellbezug auf die Zelle als Formel belassen und nicht als Fix-Wert eintragen.
so wie du das machst, muss das Makro bei jeder Wertänderung neu laufen.
Erstellst du den Zellbezug jedoch als Formel dynamisch, muss der Code nur dann neu laufen, wenn neue Blätter hinzukommen oder gelöscht werden (wobei man das dann auch manuell nachpflegen kann).
hierzu reicht es, diese Zeile:
Worksheets("Liste").Cells(i, 2) = Worksheets(x).Cells(33, 3)

so zu ändern:
Worksheets("Liste").Cells(i, 2).formular1c1 = "='" & Worksheets(x).Name & "'!R33C3"

Gruß Daniel

Anzeige
AW: hier meine Variante
10.05.2015 20:04:56
Sunny
Vielen Dank an alle für die wertvollen Hilfen!
Sunny

Noch ne Variante mit Excel4-Makro...
11.05.2015 08:53:05
{Boris}
Hi Luc,
Name x definieren mit Bezug auf:
=ARBEITSMAPPE.ZUORDNEN(1+0*JETZT())
Dann:
=INDIREKT("'"&INDEX(x;ZEILEN($1:1))&"'!C33")
und 150 mal runterkopieren.
Damit sind die Blattnamen dann egal.
VG, Boris

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige