Ersetzen einiger Formeln durch die Formelergebnisse (Microsoft Excel)
Brian muss ein Arbeitsblatt verarbeiten, bevor es an andere Personen weitergegeben werden kann. Was er braucht, ist, die meisten, aber nicht alle Formeln im Arbeitsblatt zu entfernen. Er möchte alle Zellen in einem ausgewählten Zellbereich durchlaufen und, wenn die Zelle eine Formel enthält, diese Formel überprüfen. Wenn die Formel einen Verweis (einen beliebigen Verweis) auf ein anderes Arbeitsblatt in der aktuellen Arbeitsmappe enthält, wird die Formel ignoriert. Wenn die Formel keine solche Referenz enthält, muss das Makro die Formel durch das Ergebnis der Formel ersetzen.
Dies ist eine relativ einfache Aufgabe. Alles, was Sie tun müssen, ist, Ihren Makroschritt durch die Zellen zu führen und (1) herauszufinden, ob die Zelle eine Formel enthält. Wenn dies der Fall ist, überprüfen Sie, ob die Formel ein Ausrufezeichen enthält. Ausrufezeichen werden in Formelreferenzen wie den folgenden verwendet:
=Sheet2!A1
Wenn die Formel ein Ausrufezeichen enthält, können Sie es ignorieren. Wenn es kein Ausrufezeichen enthält, können Sie es durch seinen Wert ersetzen.
Sub ConvertFormulas1() Dim c As Variant Dim frm As String On Error Resume Next For Each c In Selection If c.HasFormula Then frm = c.Formula If InStr(1, frm, "!") = 0 Then c.Value = c.Value End If End If Next c End Sub
Dieser Ansatz hat einen Nachteil: Das Ausrufezeichen wird in allen Formeln außerhalb des aktuellen Arbeitsblatts angezeigt, einschließlich der Formeln in anderen Arbeitsmappen. Wenn Sie wirklich nur Formeln durch andere Arbeitsblätter in der aktuellen Arbeitsmappe ersetzen möchten, aber Formeln ignorieren möchten, die auf Blätter in anderen Arbeitsmappen verweisen, müssen Sie zusätzliche Logik hinzufügen. Die Logik wird deutlich, wenn Sie sich ansehen, wie Excel auf diese anderen Arbeitsmappen verweist:
=[OtherWorksheet.xls]Sheet1'!$C$9
Beachten Sie, dass der Name der anderen Arbeitsmappe in Klammern steht.
Nach dem Testen des Ausrufezeichens (das Sie darüber informiert, dass sich der Verweis auf ein anderes Arbeitsblatt befindet, müssen Sie daher prüfen, ob eine linke Klammer vorhanden ist. Wenn diese vorhanden ist, bezieht sich der Verweis nicht auf eine Zelle in der aktuellen Arbeitsmappe.
Sub ConvertFormulas2() Dim c As Variant Dim OtherSheet As Boolean Dim frm As String On Error Resume Next For Each c In Selection If c.HasFormula Then frm = c.Formula OtherSheet = False If InStr(1, frm, "!") Then OtherSheet = True If InStr(1, frm, "[") Then OtherSheet = False End If End If If Not OtherSheet Then c.Value = c.Value End If End If Next c End Sub
Es sollte darauf hingewiesen werden, dass es relativ einfach wäre, die in diesem Makro verwendete Formel so zu ändern, dass alle externen Referenzen beim Verlassen entfernt werden Die Verweise auf das aktuelle Arbeitsblatt sind intakt. Alles, was Sie tun müssen, ist, die Prüfung für die Klammer zu entfernen und dann das Schlüsselwort „Not“ in der Struktur zu entfernen, die die Variable OtherSheet überprüft.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite mit hilfreichen Informationen vorbereitet .
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (6959) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: