Formel im Vergleich zu Formel2
Range.Formula und Range.Formula2 sind zwei verschiedene Möglichkeiten, die Logik in der Formel darzustellen. Sie können sich an zwei Dialekte der Formelsprache von Excel denken.
Excel hat immer zwei Arten von Formelauswertung unterstützt: Implizite Schnittmengenauswertung ("IIE") und Arrayauswertung ("AE"). Vor der Einführung dynamischer Arrays war IIE die Standardeinstellung für Zellformeln, während AE überall sonst verwendet wurde (Bedingte Formatierung, Datenüberprüfung, CSE-Arrayformeln usw.).
Der Hauptunterschied zwischen den beiden Auswertungsformen bestand darin, wie sie sich verhalten, wenn ein mehrzelliges Bereich (z. B. A1:A10) an eine Funktion übergeben wurde, die einen einzelnen Wert erwartet:
- IIE würde die Zelle in derselben Zeile oder Spalte wie die Formel auswählen. Dieser Vorgang wird als "implizite Schnittmenge" bezeichnet.
- AE ruft die Funktion mit jeder Zelle im mehrzelligen Bereich auf und gibt ein Array von Ergebnissen zurück. Dieser Vorgang wird als "Anheben" bezeichnet.
Wenn Range.Formula zum Festlegen der Formel einer Zelle verwendet wird, wird IIE für die Auswertung verwendet.
Mit der Einführung von Dyanamic Arrays (DA) unterstützt Excel jetzt die Rückgabe mehrerer Werte in das Raster, und AE ist jetzt die Standardeinstellung. AE-Formeln können mithilfe von Range.Formula2 festgelegt/gelesen werden, die Range.Formula ablöst. Um die Rückkompatibilität zu erleichtern, wird Range.Formula jedoch weiterhin unterstützt und wird weiterhin IIE-Formeln festlegen/zurückgeben. Die Formel, die mithilfe von Range.Formula festgelegt wurde, löst implizite Schnittmengen aus und kann niemals überlaufen. Formeln, die mithilfe von Range.Formula gelesen werden, werden weiterhin im Hintergrund angezeigt, wenn implizite Schnittmengen auftreten.
Range.Formula meldet effektiv, was in Pre-DA Excel auf der Bearbeitungsleiste angezeigt wird, während Range.Formula2 die von der Bearbeitungsleiste in DA Excel gemeldete Formel meldet.
Excel übersetzt automatisch zwischen diesen beiden Formelvariationen, sodass beide gelesen und festgelegt werden können. Um die Übersetzung von Range.Formula (mit IIE) in Range.Formula2 (AE) zu vereinfachen, gibt Excel mithilfe des neuen impliziten Schnittmengenoperators @an, wo implizite Schnittmengen auftreten könnten. Um die Übersetzung von Range.Formula2 (mit AE) in Range.Formula (mit IIE) zu vereinfachen, entfernt Excel @-Operatoren, die im Hintergrund ausgeführt werden würden. Oft gibt es keinen Unterschied zwischen den beiden.
Übersetzen von Range.Formula in Range.Formula2
Dieses Beispiel zeigt das Ergebnis des Festlegens von Range.Formula und dem anschließenden Abrufen von Range.Formula2
Dim cell As Range
Dim str As String
Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(A1:A4)")
For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
cell.Formula = ArrayOfFormulas(i)
str = "Wrote Range.Formula:" & vbCr & cell.Formula & _
vbCr & vbCr & _
"Read Range.Formula2:" & vbCr & cell.Formula2
MsgBox (str)
Next i
Schreiben von Range.Formula | Lesen von Range.Formula2 | Notizen |
---|---|---|
=SQRT(A1) | =SQRT(A1) | Identisch, da keine implizite Schnittmenge auftreten konnte |
=SQRT(A1:A4) | =SQRT(@A1:A4) | SQRT erwartet einen einzelnen Wert, erhält aber einen mehrzelligen Bereich. Dadurch wird eine implizite Schnittmenge in IIE ausgelöst. Daher ruft die Übersetzung in AE auf, wo implizite Schnittmengen mithilfe des @-Operators auftreten können. |
Übersetzen von Range.Formula2 in Range.Formula
Formelsatz mit Range.Formula2 Excel verwenden AE. Beim Speichern von Dateien untersucht DA Excel die Formeln in der Arbeitsmappe, um zu ermitteln, ob sie in AE und IIE dasselbe berechnen würden. Wenn ja, kann Excel die Rückkompatibilität als IIE speichern, um die Anzahl der Arrayformeln zu reduzieren, die von Pre DA-Versionen von Excel angezeigt werden. Sie können mit Range.SavedAsArray() testen, ob die Formel als Arrayformel in einer Datei gespeichert wird.
Dim cell As Range
Dim str As String
Set cell = Worksheets("Sheet1").Cells(2, 1)
ArrayOfFormulas = Array("=SQRT(A1)", "=SQRT(@A1:A4)", "=SQRT(A1:A4)", "=SQRT(A1:A4)+SQRT(@A1:A4)")
For i = LBound(ArrayOfFormulas) To UBound(ArrayOfFormulas)
cell.Formula2 = ArrayOfFormulas(i)
str = "Wrote Range.Formula2:" & vbCr & cell.Formula2 & _
vbCr & vbCr & _
"Read Range.Formula:" & vbCr & cell.Formula & _
vbCr & vbCr & _
"Read Range.IsSavedAsArray:" & vbCr & cell.SavedAsArray
MsgBox (str)
Next i
Schreiben von Range.Formula2 | Lesen von Range.Formula | Lesen von Range.SavedAsArray | Notizen |
---|---|---|---|
=SQRT(A1) | =SQRT(A1) | FALSE | SQRT erwartet einen einzelnen Wert, A1 ist ein einzelner Wert. Daher keine Varianz zwischen IIE und AE. Speichern Sie als IIE, und entfernen Sie alle @'s. |
=SQRT(@A1:A4) | =SQRT(A1:A4) | FALSE | SQRT erwartet einen einzelnen Wert, @A1:A4 ist ein einzelner Wert. Daher keine Varianz zwischen IIE und AE. Speichern Sie als IIE, und entfernen Sie alle @'s. |
=SQRT(A1:A4) | =SQRT(A1:A4) | TRUE | SQRT erwartet einen einzelnen Wert, A1:A4 ist ein Mehrzellenbereich. IIE und AE können daher "save as array" variieren. |
=SQRT(A1:A4)+ SQRT(@A1:A4) | =SQRT(A1:A4)+ SQRT(@A1:A4) | TRUE | Das erste SQRT erwartet einen einzelnen Wert, A1:A4 ist ein Mehrzellenbereich. IIE und AE können daher "save as array" variieren. |
Bewährte Methoden
Wenn Sie die DA-Version von Excel als Ziel verwenden, sollten Sie Range.Formula2 vorzugeigen Range.Formula.
Wenn Sie die Pre- und Post DA-Version von Excel als Ziel verwenden, sollten Sie weiterhin Range.Formula verwenden. Wenn Sie jedoch die Darstellung der Formel der Benutzer-Bearbeitungsleiste eng steuern möchten, sollten Sie erkennen, ob . Formel2 wird unterstützt, und wenn ja, verwenden Sie . Formel2 verwendet andernfalls . Formel
Notizen
OfficeJS enthält range.Formula2 nicht. Stattdessen meldet Range.Formula immer, was in der Bearbeitungsleiste vorhanden ist. Als neuere Sprache mit der Möglichkeit für Add-Ins, Updates schnell bereitzustellen, werden Entwickler aufgefordert, ihre Add-Ins zu aktualisieren, wenn Kompatibilitätsprobleme zwischen AE und IIE auftreten.
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.