VisualBasic VBA + Zeichen in einer Formel zählen

Deathcore

Lieutenant
Registriert
Apr. 2009
Beiträge
712
Hallo liebe CBler

ich habe folgendes Problem:

Ich ein paar Zellen (manche haben nur den Wert z.B. 300 , andere haben =222+4 (Sprich eine Formel)

Nun möchte ich auslesen wie oft in einer Zelle was zusammen gerechnet wird also zählen wie oft + gerechnet wird. Aktuell verwende ich dazu eine Funktion.

Das Problem ist bei meiner Funktion kriege ich gleich das Ergebnis übergeben und nicht die eigentliche Formel. Habe scho vieles versucht: Textzelle as range.formula Textzelle.range.HasFormula

Ich hoffe ihr habt entweder gleich eine passende Funktion oder ihr zeigt mir wie ich statt Ergebnis die Formel in meine Funktion kriege.

Code:
Public Function AnzahlZeichen(TextZelle As Range, SuchString As String)

Dim lngCnt

With TextZelle.Cells(1, 1)
AnzahlZeichen = 0
String_Alt = .Text
String_neu = Replace(String_Alt, "=", "")
MsgBox (String_neu)


For lngCnt = 1 To Len(.Text)

If Mid(String_neu, lngCnt, 1) = SuchString Then _
AnzahlZeichen = AnzahlZeichen + 1


Next lngCnt
End With



End Function

Hoffe habe mich verständlich ausgedrückt
 
Zuletzt bearbeitet:
das geht z.b. so:

Code:
Public Function AnzahlZeichen(TextZelle As Range, SuchString As String)
 
    Dim content As String
    bla = TextZelle.Formula
    
    
    AnzahlZeichen = Len(bla) - Len(Replace(bla, SuchString, ""))
       
End Function

Diese Funktion vergleicht die Länge von der Eigenschaft "Formula" der Zelle mit einer modifizierten Version der Eigenschaft. In dieser Modifizierten Version sind alle vorkommenen SuchtString durch nichts ersetzt worden. Zurück kommt die Anzahl der Zeichenfolge Suchstring in der übergebene Zelle.
Vorsicht! Werden mehrere Zellen übergeben, berücksichtigt die Funktion nur die erste Zelle.
 
gibt es auch die möglichkeit das ich die ganze range abarbeite?
Ergänzung ()

close programm läuft
 
Zuletzt bearbeitet:
natürlich, z.b. so:

Code:
Public Function AnzahlZeichen(ByVal TextZelle As Range, ByVal SuchString As String)
 
    Dim content As String
    
    Dim result() As Variant
    ReDim Preserve result(1 To TextZelle.Rows.Count, 1 To TextZelle.Columns.Count)
    For i = 1 To TextZelle.Rows.Count
        
        For n = 1 To TextZelle.Columns.Count
            
            Dim con As String
            con = TextZelle(i, n).Formula
            result(i, n) = Len(con) - Len(Replace(con, SuchString, ""))
        
        Next n
    
    Next i
    
    
    AnzahlZeichen = result
       
End Function

Rückgabewert is nun natürlich ein mehrdimensionales Array, je nachdem welche Dimensionen die übergebene Range hat
 
Zurück
Oben