Office-Fragen.de

Normale Version: Makro: Formel oder addierte Zahlen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Tag

In einem Makro muss ich einen Bereich durchgehen und diejenigen Zellen löschen, die eine Zahl enthalten, jedoch diejenigen, die eine Formel enthalten nicht.

Die Funktion ActiveCell.HasFormula kenne ich, diese funktioniert jedoch nicht, da in einer Zelle auch "+210+23" stehen kann, und diese Zelle müsste gelöscht werden. Es sollten nur Formeln stehen gelassen werden, die sich auf andere Zellen beziehen (also z. B. =Summe(xxx) oder +B10+B20). Gibt es eine Möglichkeit, herauszufinden, ob sich die Formel auf andere Zellen bezieht oder ob es lediglich eine Aneinanderreihung von Additionen und Subtraktionen einzelner Zahlen ist?

Besten Dank für jede Hilfe.

Freundliche Grüsse
Thomas Baumgartner
Hallo,

Du könntest alle Zellen, die eine Formel haben (.HasFormula = True > .FormulaLocal) entweder nach Wörten wie SUMME parsen
oder - vielleicht einfacher - alle Zahlen und Operatoren über eine temporäre Variable anhand StrReplace() durch nichts ersetzen
und schauen, ob was übrig bleibt. Dann hätte die Formel mindestens einen Bezug oder eine Funktion in sich.

Gruß
Hallo,

folgende Idee:
Formeln und Bezüge zeichnen sich dadurch aus, dass immer ein Buchstabe vorkommen muss. Warum dann nicht die Zellen in einem Bereich auf Formeln prüfen und bei den Formeln wiederum prüfen, ob ein Buchstabe vorkommt. Wenn kein Buchstabe drin ist, Zellinhalt löschen.

Code:
Sub FormelnBehalten()
   
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Tabelle1")
   
    Dim rng As Range
    Set rng = ws.Range("A1").CurrentRegion
   
    Dim strZelle As String
    Dim i As Integer, j As Integer
    Dim zelle As Range
    For Each zelle In rng
        If zelle.HasFormula Then
            strZelle = zelle.Formula
            j = 0
            For i = 2 To Len(strZelle)
                If Asc(Mid(strZelle, i, 1)) > 65 And Asc(Mid(strZelle, i, 1)) < 90 Then
                    j = j + 1
                End If
            Next
            If j = 0 Then zelle.Clear
       End If
    Next zelle
   
End Sub
Feedback ist nicht so seine Kernkompetenz...

https://www.vba-forum.de/View.aspx?ziel=...n_in_Zelle?
Zumindest war das Problem interessant :-)