
Auf der Grundlage der Kommentare erläutere ich, was ich verlange.
Ich möchte eine verschachtelte Formel über mehrere Zellen hinweg zu einer einzigen Formel reduzieren.
Das folgende Beispiel soll nur zeigen, wie Sie es manuell machen können. Die Formeln können jedoch beliebiger Art sein und haben nichts mit dem folgenden Beispiel zu tun.
Ich war neugierig, ob Folgendes mit Code/Tools/Excel selbst möglich war -
Wie Sie im Bild sehen können, in hours
ist die Formel recht einfach, aber sie besteht eigentlich aus einer Reihe von Formeln aus den anderen Zellen. Ich habe mich gefragt, ob es möglich ist, die Zwischenberechnungen loszuwerden, indem man eine einzige Formel erhält, die durch die Verwendung aller Formeln in einer einzigen riesigen Formel generiert wird.
Während es einfach ist, auf diese Weise große Formeln zu entwerfen und zu debuggen, können unerfahrene Benutzer in der Produktion leicht Teile der Formel zerstören, indem sie versuchen, die Blätter zu ändern. Sie könnten sie schützen, indem Sie Blätter sperren und andere Dinge entsperren, aber das hat auch unbeabsichtigte Nebenwirkungen, wie z. B. dass Sie den Formelbereich nicht erweitern oder neue Zeilen hinzufügen können usw.
Daher habe ich mich hinsichtlich der Produktion gefragt, ob es möglich ist, für etwas, das auf diese Weise zusammengesetzt ist, eine Antwort mit einer einzigen Formel zu erhalten.
Im obigen Beispiel versuchen wir, numerische Stunden aus Zeichenfolgenstunden zu berechnen.
in hours = in seconds / 3600 = O2 / 3600
in seconds = HOURS * 3600 + MINUTES * 60 + SECONDS
HOURS = extract digits if they exist between 'h' and beginning of string
MINUTES = extract digits if they exist between 'h' and 'm'
SECONDS = extract digits if they exist between 'm' and end of string
Wenn Sie also die Formeln manuell ersetzen würden, käme das Ergebnis so rüber
in hours = (HOURS * 3600 + MINUTES * 60 + SECONDS) / 3600
= (extract digits if they exist between 'h' and beginning of string * 3600 + extract digits if they exist between 'h' and 'm' * 60 + extract digits if they exist between 'm' and end of string) / 3600
Wie Sie sehen, ist dieses Beispiel recht einfach, aber ich frage mich, ob es auch für andere komplexe zusammengesetzte Funktionen möglich ist.
Excel führt alle diese Berechnungen bereits selbst durch, in einer ArtASTIch nehme an, da es bereits zyklische Abhängigkeiten und dergleichen erkennt. Es muss also eine Möglichkeit geben, es selbst zu tun? Oder uns in die Excel-Grundlagen einzuklinken, um dieselbe Formel zu extrahieren?
Antwort1
Es ist wahrscheinlich möglich, das zu tun, was Sie wollen, aber eine UDF wäre möglicherweise besser, wenn Sie sie verwenden könnten.
Option Explicit
Function MyHrs(MyType As String, target As String) As Single
Dim x As Long, y As Long, z As Long
Dim Hrs As Long, Mns As Long, Ss As Long
On Error Resume Next
x = InStr(target, "h")
y = InStr(target, "m")
z = InStr(target, "s")
Hrs = Left(target, x - 1)
Mns = Mid(target, x + 1, y - x - 1)
Ss = Mid(target, y + 1, z - y - 1)
If MyType = "h" Or MyType = 1 Then MyHrs = Hrs + Mns / 60 + Ss / 3600
If MyType = "m" Or MyType = 2 Then MyHrs = Hrs * 60 + Mns + Ss / 60
If MyType = "s" Or MyType = 3 Then MyHrs = Hrs * 3600 + Mns * 60 + Ss
End Function
Öffnen Sie mit ALT + F11 das Entwicklerfenster, fügen Sie dort ein Modul ein und fügen Sie den Code ein. Im Tabellenblatt verwenden Sie ihn wie folgt:
Hier wäre zur Vermeidung der generierten Fehler wahrscheinlich etwas mehr Codierung erforderlich, aber zur Demonstration des Konzepts sollte es funktionieren.