Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code für Anzahl Leerzeichen in Zelle

Code für Anzahl Leerzeichen in Zelle
07.02.2023 17:07:26
Dieter(Drummer)
Guten Tag VBA Spezialisten/innen,
mit folgendem Code - hab lange dran gebastelt :-) - kann ich die Anzahl Leerzeichen einer Zelle zählen und in MsgBox zeigen. Das funktioniert, s. Beispieldatei:
https://www.herber.de/bbs/user/157700.xlsm
  • Sub Leerzeichen_Anzahl()
    MsgBox "Leerzeichen Anzahl: " & Len(ActiveCell) - Len(Replace(ActiveCell, " ", ""))
    End Sub

  • Kann der Code kürzer sein und wenn ja wie?
    Mit der Bitte um Hilfe, grüßt,
    Dieter(Drummer)

    17
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Spielerei
    07.02.2023 17:19:20
    GerdL
    Moin Dieter!
    MsgBox "Leerzeichen Anzahl: " & Application.Max(0, UBound(Split(ActiveCell)))
    Gruß Gerd
    AW: Spielerei
    07.02.2023 17:29:00
    Dieter(Drummer)
    Danke Gerd für kürzere Variante, die auch prima funktioniert.
    Hatte den Code erstellt, da ich Spaß daran habe und gerne dazu lerne :-).
    Gruß und Danke dir ...
    Dieter(Drummer)
    AW: Spielerei
    07.02.2023 17:57:52
    GerdL
    Da wir schon dabei sind. :-)
    MsgBox "Leerzeichen Anzahl: " & UBound(Split(ActiveCell & " ")) - 1
    Gruß Gerd
    AW: Spielerei :-)
    07.02.2023 18:07:51
    Dieter(Drummer)
    Danke Gerd,
    funktiomiert auch perfekt.
    Gruß und Danke,
    Dieter(Drummer)
    AW: Spielerei noch kürzer
    07.02.2023 17:30:28
    Daniel
    MsgBox "Leerzeichen Anzahl: " & UBound(Split(ActiveCell & "x")))
    gruß Daniel
    Anzeige
    AW: Spielerei noch kürzer
    07.02.2023 17:44:01
    Dieter/Drummer)
    Danke Daniel,
    funktioniert ebenfalls perfekt. Man lernt nie auch :-) ...
    Gruß, Dieter(Drummer)
    AW: Spielerei noch kürzer
    07.02.2023 17:59:15
    Dieter(Drummer)
    Hallo Daniel,
    musste wohl das letzte Zeichen ")" entfernen und jetzt geht's.
    Danke dir und Gruß,
    Dieter Drummer)
    AW: Code für Anzahl Leerzeichen in Zelle
    07.02.2023 18:03:36
    Yal
    Hallo Dieter,
    kürzer bedeutet nicht besser. Wichtig ist, dass Du heute vertehst, was im Code passiert und dass Du immer noch verstehst, wenn Du den Code 3 Monaten liegen lässt. Zugegeben, je kürzer desto weniger zu analysieren.
    Daher finde ich deine Längenunterschied hervorragend und ausreichend.
    Wenn es nicht darum geht, "etwas kürzes" zu haben, aber algorythmisch gesehen etwas stabiles, wäre folgendes leichter zu verallgemeinen:
    Sub GegebeneZeichen_zählen 
    Dim Zähler as Integer
        For i = 1 to Len(ActiveCell.Text) 
            If Mid(ActiveCell.Text, i,1) = " " Then Zähler = Zähler + 1
        Next
        MsgBox "Es wurden " & Zähler & " Leerzeichen gefunden."
    End Sub
    Es ist nicht kurzgeschrieben, aber im Sinne von CPU-Verarbeitung, ist es am schnellsten (besser oder nicht?)
    Gleichzeitig schliesse ich mich die sehr kreative Lösungen von Gerd und Daniel, falls Du daraus etwas entnehmen kannst, um dein Wissen aufzustocken, mit einer ein Bischen kürzere Lösung, aber nicht so leicht zu verstehen:
    Sub GegebeneZeichen_zählen 
    Dim Zähler as Integer
        For i = 1 to Len(ActiveCell.Text) 
            Zähler = Zähler - (Mid(ActiveCell.Text, i,1) = " ")
        Next
        MsgBox "Es wurden " & Zähler & " Leerzeichen gefunden."
    End Sub
    Liegt daran, False in einem Integer 0 und True in einem Integer -1 konvertiert werden.

    VG
    Yal
    Anzeige
    AW: Code für Anzahl Leerzeichen in Zelle
    07.02.2023 18:11:08
    Dieter(Drummer)
    Danke Yal für Erläuterungen und Code
    Werde mich damt befassen und sicher dazu lernen.
    Mit Gruß, Dieter(Drummer)
    und wenn du ....
    07.02.2023 18:17:15
    Rudi
    Hallo,
    ... ActiveCell.Text vorher in eine Variable einliest und die analysierst, geht's noch mal erheblich schneller. ~35 mal.
    Gruß
    Rudi
    AW: und wenn du ....
    08.02.2023 08:59:23
    Dieter(Drummer)
    Guten Morgen Rudi,
    Danke für deinen Hinweis, Diesen wohl anzuwenden/umzusetzen, dafür fehlt mir noch die Kenntnis.
    Wäre natürlich an deiner Lösung auch interessiert, um ebenfalls dazu zu lernen.
    Gruß, Dieter(Drummer)
    AW: und wenn du ....
    08.02.2023 12:36:02
    Rudi
       Sub GegebeneZeichen_zählen 
           Dim Zähler as Integer, i As Integer, s As String
           s=ActiveCell.Text
           For i = 1 to Len(s) 
               If Mid(s, i,1) = " " Then Zähler = Zähler + 1
           Next
           MsgBox "Es wurden " & Zähler & " Leerzeichen gefunden."
       End Sub
    Gruß
    Rudi
    Anzeige
    AW: Danke Rudi ...
    09.02.2023 09:44:02
    Dieter(Drummer)
    ... klappt auch prima und Sorry für späte Rückmeldung.
    Gruß, Dieter(Drummer)
    x mal schneller
    08.02.2023 15:05:31
    Yal
    In der Tat.
    Vergleicht man die beide Version, kommt man sogar auf ca 75 mal schneller.
    Man muss erst die Aufgabe 10.000 durchlaufen lassen, sodass die Zeiten aussagekräftig sind. Da viel Nebenrechnung auf dem Rechner stattfinden, empfieht es sich mehrere Laufe zu machen und eine Durchschnitt zu rechen.
    Sub GegebeneZeichen_zählen()
    Dim Zähler As Integer
    Dim i&, j&, k& '&: Long
    Dim s As String
    Dim T, T1, T2
    Dim Durchschnitt As Double
    Const f = "0.00000"
        For k = 1 To 10
        'Version Variable
            T = Timer
            s = Range("A1").Text
            For j = 1 To 10000
                Zähler = 0
                For i = 1 To Len(s)
                    If Mid(s, i, 1) = " " Then Zähler = Zähler + 1
                Next i
            Next j
            T1 = Timer - T
        'Version Zelle
            T = Timer
            For j = 1 To 10000
                Zähler = 0
                For i = 1 To Len(Range("A1").Text)
                    If Mid(Range("A1").Text, i, 1) = " " Then Zähler = Zähler + 1
                Next i
            Next j
            T2 = Timer - T
            Debug.Print Format(T1, f), Format(T2, f), Format(T2 / T1, f)
            Durchschnitt = Durchschnitt + T2 / T1
        Next k
        Debug.Print Durchschnitt / 10
    End Sub
    Aber jetzt wissen wir es genau.
    VG
    Yal
    Anzeige
    AW: x mal schneller
    08.02.2023 15:46:42
    peterk
    Hallo
    
            s = Range("A1").Text
            For j = 1 To 10000
                Zähler = Len(s) - Len(Replace(s, " ", ""))
            Next j
    
    Ist nochmals um den Faktor 4 schneller. Und am schnellsten ist:
    
            s = Range("A1").Text
            For j = 1 To 10000
                c = Split(s, " ")
                Zähler = UBound(c)
            Next j
    
    Peter
    AW: x mal schneller
    09.02.2023 09:48:20
    Dieter(Drummer)
    Danke Peter und Sorry für späte Rückmeldung.
    Für mich war wohl nicht unbedingt die Geschwindigkeit wichtig, aber dennoch Danke.
    Gruß, Dieter(Drummer)
    Anzeige
    AW: x mal schneller
    09.02.2023 09:47:06
    Dieter(Drummer)
    Danke Yal uns Sorry für späte Rückmeldung.
    Für mich war wohl nicht unbedingt die Geschwindigkeit wichtig, aber dennoch Danke.
    Gruß, Dieter(Drummer)

    314 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige