Formelsubstitution exzellent

1

ist es möglich, die formelsubstitution einfach in excel durchzuführen?

Ich habe ein Arbeitsblatt ähnlich dem folgenden Beispiel (wenn auch komplexer, daher die Notwendigkeit einer Funktion in Excel, wenn es eine gibt)

Ich möchte die Gesamtverkaufsfunktion durch die tatsächlichen Eingabewerte und nicht durch Formeln ersetzen.

F6+I6+L6+O6 = F9 + L9
F4+F5+I4+I5+L4+L5+O4+O5 = F6+I6+L6+O6

that is 
F9 + L9 becomes F4+F5+I4+I5+L4+L5+O4+O5

Bildbeschreibung hier eingeben

Ich hoffe du verstehst was ich will

Viktor Mellgren
quelle
Probieren Sie es unter webapps.stackexchange.com
aparente001
1
Es ist keine Webapp. Und afaik, Excel-Fragen sind zum Thema
Viktor Mellgren
Oh, richtig. Ich bin verwirrt, Excel geht auf eine Website, Google Sheets geht auf die andere.
aparente001
Sie möchten, dass Ihre Formeln auf alle Präzedenzfälle verweisen, anstatt wie Sie sie eingegeben haben?
Raystafarian
@ Raystafarian genau, um die Wurzel Präzedenzfälle, wenn möglich, aber ein Schritt nach unten ist auch in Ordnung, wenn ich es wiederholt tun kann
Viktor Mellgren

Antworten:

2

Ich habe einen schnellen Code geschrieben, der tun soll, was Sie wollen.

Ich gehe davon aus, dass überprüft wird, ob eine Zelle eine Formel enthält, und in diesem Fall alle Instanzen ersetzt werden, in denen diese Zelle mit dieser Formel referenziert wird.

Sobald es das Blatt durchgegangen ist, wenn es irgendwelche Ersetzungen gefunden hat, wird es erneut durchlaufen (nicht wirklich sicher, ob es dies benötigt, aber einfacher einzulegen war). Ich habe auch keine Ahnung, wie schnell dies auf komplexen Arbeitsblättern abläuft.

Beachten Sie, dass $ A $ 1, $ A1, A $ 1 und A1 genauso behandelt werden, wie es ohnehin nicht der Fall ist, wenn festgestellt werden soll, ob die Referenz eingefrorene Zellen enthält.

Sub replace_formulas()
Dim cell_count As Long, flag As Boolean

Do

flag = False

For Each c In ActiveSheet.UsedRange
    If c.HasFormula Then

        'count number of replacements
        cell_count = Application.WorksheetFunction.CountIf(Cells, c.Address) + _
            Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "")) + _
            Application.WorksheetFunction.CountIf(Cells, Replace(c.Address, "$", "", 1, 1)) + _
            Application.WorksheetFunction.CountIf(Cells, "$" & Replace(c.Address, "$", ""))

        'If there is at least one replacement loop through all the cells after this one
        If cell_count > 0 Then flag = True

        'Replace cell references with and without $ ($A$1,$A1,A$1,A1)
        Cells.Replace What:=c.Address, Replacement:="c.formula", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        Cells.Replace What:=Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        Cells.Replace What:=Replace(c.Address, "$", "", 1, 1), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        Cells.Replace What:="$" & Replace(c.Address, "$", ""), Replacement:=Right(c.Formula, Len(c.Formula) - 1), LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    End If
Next

Loop While flag = True

End Sub
gtwebb
quelle
1

Möglicherweise müssen Sie dies manuell tun, es gibt jedoch eine hilfreiche Funktion: Verfolgen von Präzedenzfällen (auf der Registerkarte Formeln in Excel 2013).

Dadurch werden Pfeile hinzugefügt, die den Ursprung der von Ihnen ausgewählten Formel anzeigen. Wenn Sie also in Ihrem Beispiel den Gesamtumsatz in Spalte J ausgewählt und auf die Präzedenzfälle geklickt haben, werden Pfeile von F9 und L9 dazu gezeichnet.

RET
quelle
Ich kenne diese Funktionalität, aber ich habe eine große Tabelle, die ungefähr 600 Zellen in der endgültigen Formel enthalten wird (und mit vielleicht 15 tiefen Formeln), sodass manuelle Arbeit nicht möglich ist, daher die Frage :)
Viktor Mellgren