Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Makro: Formel oder addierte Zahlen
#1
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
Zitieren
#2
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ß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2022
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Zitieren
#3
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
Zitieren
#4
Feedback ist nicht so seine Kernkompetenz...

https://www.vba-forum.de/View.aspx?ziel=...n_in_Zelle?
Zitieren
#5
Zumindest war das Problem interessant :-)
Gruß,
Pawel Popolski

Logik hat immer ein eindeutiges Ergebnis, folgt aber nicht zwingend einem eindeutigen Weg.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions