Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1508to1512
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

Vorgänger einer Berechnung extrahieren

Vorgänger einer Berechnung extrahieren
06.08.2016 12:48:39
Michael
Hallo Zusammen,
ich arbeite sehr häufig in einer großen Tabelle (ca. 200 Spalten und 150 Zeilen).
Wenn das Ergebnis einer Berechnung überprüft werden muss, gibt es allerdings ein Problem: die Berechnung greift des Öfteren auf mehr als 8 Zellen zu, die in der gesamten Tabelle wahllos (aber innerhalb einer Zeile) verteilt sind!
Ist es möglich, die Werte, die zum Ergebnis führen, mit der Überschrift ( in Zeile 1), in eine separate Tabelle zu überführen?
Das wäre schon eine sehr große Hilfe. Genial wäre es, wenn die Berechnung in der neuen Tabelle auch noch auf die extrahierten Werte zugreift.
Ist so etwas überhaupt möglich?
Vielen Dank für Eure Unterstützung.
Michael

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
leider nicht
06.08.2016 14:15:51
Michael
Hallo Gerd,
Vielen Dank. Leider hilft mir das nicht weiter, da ich es nicht für meine konkrete Aufgabenstellung umbauen kann.
Viele Grüße
Michael
AW: Beispieldatei
06.08.2016 14:22:34
Daniel
Hi
kanns du mal eine Beispieldatei hochladen mit 2 oder 3 Zeilen, in welcher du manuell dein Wunschergebnis erstellt, damit wir uns besser vorstellen können was du haben willst?
Gruß Daniel
Anzeige
AW: Vorgänger einer Berechnung extrahieren
06.08.2016 17:41:10
Fennek
Hallo,
in meinem kleine Test (nur 4 Zeilen) hat der folgende Code nach meinem Verständnis funktioniert:

Sub Michael()
With Sheets(1)
For i = 2 To 4
ar = .Cells(i, 4).DirectPrecedents.Address
lr = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets(2).Cells(lr, "A") = .Cells(i, 4)
j = 1
For Each a In Split(ar, ",")
Sheets(2).Cells(lr, "A").Offset(, j) = .Range(a)
j = j + 1
Next a
Next i
End With
End Sub
mfg
Anzeige
noch nicht gaz
06.08.2016 18:03:21
Michael
Hallo Fennek,
für das erste Beispiel funktioniert es fast. Die Überschriften zu den Werten wären sehr hilfreich.
Für das zweite Beispiel habe das Makro nicht entsprechend verändern können.
An welchen Stellen muss ich denn was verändern?
Vielen Dank und Gruß
Michael
AW: Vorgänger einer Berechnung extrahieren
06.08.2016 18:02:35
Fennek
Hallo,
das zweite Beispiel wird von folgendem Code analysiert werden:

Sub Michael2()
With Sheets(1)
ar = .Cells(4, 6).DirectPrecedents.Address
lr = Sheets(2).Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets(2).Cells(lr, "A") = .Cells(4, 6)
j = 1
For Each a In Range(ar).Areas
If a.Count > 1 Then
For Each c In a
Sheets(2).Cells(lr, "A").Offset(, j) = c
j = j + 1
Next c
Else
Sheets(2).Cells(lr, "A").Offset(, j) = a.Value
End If
j = j + 1
Next a
End With
End Sub
mfg
Anzeige
Nur zwecks besserem Verständnis
06.08.2016 19:08:09
Luc:-?
Meinst du so etwas, Michael?
Userbild
Auf die Angabe der Fmln dieser Ergebnisse verzichte ich, da du sie ohnehin nicht nachstellen könntest. In der ZwischenZeile habe ich deshalb nur die jeweils verwendeten Fktt angegeben:
Blau → bereits veröffentlichte UDFs (im Archiv)
Rot → bisher unveröffentlichte UDFs, deren hier entscheidende auch nicht dafür bestimmt sind (müssen aktualisiert wdn)
Statt CFormA kann in den neuesten Xl-Versionen (nicht Xl14!) FORMELTEXT verwendet wdn, RepOpt bewirkt hier eine mehrfache Wiederholung der XlFkt WECHSELN für jede mit AList aufgelistete Adresse (mit VSplit getrennt, mit TxEval ausgewertet, weil INDIREKT keine unzusammen­hängenden Bereiche verarbeiten kann, und ggf mit VJoin zusammen­gefasst), wobei intern eine höhere Version der im Archiv enthaltenen UDF MaskOn, die mit einem in archivierter Version nicht möglichen Argument quasi als Adress-Parser fungiert. Diese Version muss ebenfalls noch aktualisiert wdn, was nur ein Grund dafür ist, dass sie bisher nicht veröffentlicht wurde. Der andere besteht in der Einbindung in den UDF-Bestand eines AddIns. Ihre Isolierung würde zusätzlichen ArbeitsAufwand bedeuten.
Aber viell kannst du oder die anderen Helfer ja doch etwas hiermit anfangen…
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Version 2
06.08.2016 21:51:25
Fennek
Hallo,
hier ein etwas "schönerer" Code, der in Sheets(3) schreibt:

Sub iFormeln()
With Sheets(1).UsedRange.SpecialCells(3)
For Each c In .Cells
Debug.Print c.Address, c.Formula
lr = Sheets(3).Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets(3).Cells(lr, "A") = c.Address
Sheets(3).Cells(lr, "B") = Replace(c.Formula, "=", "'=")
Sheets(3).Cells(lr, "C") = c
For Each ar In c.DirectPrecedents.Areas
If ar.Count = 1 Then
Sheets(3).Cells(lr, "D").Offset(, j) = ar.Address:    j = j + 1
Sheets(3).Cells(lr, "D").Offset(, j) = ar:            j = j + 1
Else
For Each a In ar
Sheets(3).Cells(lr, "D").Offset(, j) = a.Address: j = j + 1
Sheets(3).Cells(lr, "D").Offset(, j) = a:         j = j + 1
Next a
End If
Next ar
j = 0
Next c
End With
End Sub
mfg
https://www.herber.de/bbs/user/107438.xlsm
Anzeige
Fast!
07.08.2016 08:08:26
Michael
Hallo Fennek,
na das sieht ja schon prima aus.
In meiner realen Datenbank (200 Spalten und 120 Zeilen) würde ich als Ergebnis nur eine Zeile benötigen: es soll die Berechnung der aktiven Zelle ermittelt werden.
Leider reichen meine VBA-Kentmisse nicht aus, um Dein Makro entsprechend anzupassen.
Wäre es außerdem möglich, die Zelladresse der ermittelten Werte oberhalb der Werte zu plazieren?
Ich danke Dir ganz herzlich für Deine Mühe und wünsche Dir noch einen schönen Sonntag
Michael
AW: Vorgänger einer Berechnung extrahieren
07.08.2016 14:02:16
Daniel
Hi
probier mal folgende Datei:

Die Datei https://www.herber.de/bbs/user/107448.xlsm wurde aus Datenschutzgründen gelöscht


einfach Zelle mit der zu analysierenden Formel auswählen und auf den Button klicken.
funktioniert zumindest mal für die gelb markierten Formeln.
Gruß Daniel
Anzeige
Funktioniert zu 99%
07.08.2016 14:36:58
Michael
Hallo Daniel,
das ist ja hervorragend! Besonders die Formel in B2, mit den Bezügen auf die Ergebnistabelle ist für die Fehlersuche perfekt. Hier gibt es noch ein kleines Problem.
Ich habe das Beispiel mal um einige Berechnungen erweitert:

Die Datei https://www.herber.de/bbs/user/107449.xlsm wurde aus Datenschutzgründen gelöscht


Wenn man bei der Berechnung eine Funktion verwendet, werden in B2 die Bezüge der Original-Tabelle angezeigt.
Außerdem habe ich noch zwei Fragen:
1) kann man die Ergebnismatrix in ein separates Blatt überführen?
2) in meiner großen Originaltabelle, auf die ich leider erst morgen ab 11:00 Zugriff habe, beginnt die Tabelle in K11. Muss ich am Makro ggf. noch Anpassungen vornehmen?
Ich bedanke mich schon mal für Deine hervorragende Unterstützung.
Gruß
Michael
Anzeige
AW: Funktioniert zu 99%
07.08.2016 16:20:02
Daniel
Hi
ok, hier fast alle Wünsche umgesetzt.
Die Änderung, dass die Originaltabelle erst in Zeile 11 mit der Überschrift beginnt und nicht in Zeile 5 wie in meiner Beispieldatei, überlasse ich dir.
Der Code ist von mir ausreichend kommentiert, du solltest die Stelle, die du dazu anpassen musst leicht finden
https://www.herber.de/bbs/user/107451.xlsm
gruß Daniel
DANKE!
07.08.2016 16:52:24
Michael
Hallo Daniel,
ich kann nur sagen: einfach genial!
Das wird mir künftig sehr viel Zeit ersparen, da ich das Makro in vielen Tabellen für Kontrollen einsetzen kann.
Ich danke Dir ganz herzlich und wünsche Dir noch einen schönen Sonntagnachmittag.
Gruß
Michael
Anzeige
AW: nur für Selction
08.08.2016 09:41:56
Fennek
Hallo,
versuche diesen Code, um die Analyse der Precedents auf selektierte Zellen, auch in nicht-zusammenhängenden Bereichen einzuschränken.

Sub iFormeln_in_Selection()
'strg-w
With Sheets(1)
For Each c In selection
lr = Sheets(3).Cells(Rows.Count, "A").End(xlUp).Row + 1
Sheets(3).Cells(lr, "A") = c.Address
Sheets(3).Cells(lr, "B") = Replace(c.Formula, "=", "'=")
Sheets(3).Cells(lr, "C") = c
For Each ar In c.DirectPrecedents.Areas
If ar.Count = 1 Then
Sheets(3).Cells(lr, "D").Offset(, j) = ar.Address:    j = j + 1
Sheets(3).Cells(lr, "D").Offset(, j) = ar:            j = j + 1
Else
For Each a In ar
Sheets(3).Cells(lr, "D").Offset(, j) = a.Address: j = j + 1
Sheets(3).Cells(lr, "D").Offset(, j) = a:         j = j + 1
Next a
End If
Next ar
j = 0
Next c
End With
End Sub
Am besten startet man das Makro über einen Shortcut (Menü Ansicht, Makros, Optionen), z.b. w.
mfg
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige