Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeichen in einem String zählen

Zeichen in einem String zählen
Holger,
Guten Morgen Forum!
Manchmal kommt man beim Programmieren ewig nicht dahin, wo man hin möchte, sondern
muss sich vorher mit ganz anderen Problemen herumschlagen.
Ich habe einen String z.B HERBST;WINTER;SOMMER.
Er kann aber auch nur HERBST;WINTER sein.
Daher möchte ich die Zahl der Semikolons zählen um jedes einzelne Element
des String in einer Variable zu speichern.
Wie läßt sich das am einfachsten umsetzen?
Anzeige
AW: Zeichen in einem String zählen
11.02.2011 09:46:01
OttoH
Hallo Holger,
es funktioniert z.B. mit folgender Funktion:
Function semikolon(Text)
Dim i As Integer
For i = 1 To Len(Text)
If Mid$(Text, i, 1) = ";" Then
semikolon = semikolon + 1
End If
Next
End Function
Steht dein Text in A1, erfolgt der Aufruf mit =Semikolon(A1)
Gruß OttoH
Anzeige
Und wie in Variablen speichern?
11.02.2011 09:49:49
Holger,
Hallo Otto,
Vielen Dank.
Ich stehe nur vor einem für mich unlösbarem Problem.
Vorher weiß ich ja nicht wieviele Werte ich am Schluss bekomme.
Jeden Wert aus dem String muss ich aber in einer extra Variablen halten,
auf die ich später wieder zugreifen muss.
Im Detail durchlaufe ich später eine Tabelle und prüfe ob der Zellwert einer diese
Werte entspricht.
Speichere ich die Werte in ein Array, woher weiß ich später wo welcher Wert steht
und wieviele es gibt?
Anzeige
AW: Und wie in Variablen speichern?
11.02.2011 09:57:26
ing.grohn
Hallo Holger,
probier doch mal folgendes:

dim K as Integer
dim strText() as String  'Variant
dim mText as String
mText = "Herbst;Winter;Sommer"
strText = Split(mText, ";")
For K = 0 To UBound(strText)
Debug.Print K & " " & strText(K)
Next K

Mit freundlichen Grüßen
Albrecht
Anzeige
AW: Und wie in Variablen speichern?
11.02.2011 10:07:48
Reinhard
Hallo Holger,
der erste Code ist dafür wenn der erste Arrayindex 0 ist oder 1, er funktioniert bei 0 und 1.
Der zweite Code wenn du sicher bist daß der erste Index immer die 0 sein wird.
Sub Trenn()
Dim Satz As String, arrS() As String, S As Integer
Satz = "HERBST;WINTER;SOMMER"
arrS = Split(Satz, ";")
MsgBox "arrS hat " & UBound(arrS) - 1 * (LBound(arrS) = 0) & " Elemente"
For S = LBound(arrS) To UBound(arrS)
MsgBox arrS(S)
Next S
End Sub
Sub Trenn2()
Dim Satz As String, arrS() As String, S As Integer
Satz = "HERBST;WINTER;SOMMER"
arrS = Split(Satz, ";")
MsgBox "arrS hat " & UBound(arrS) + 1 & " Elemente"
For S = 0 To UBound(arrS)
MsgBox arrS(S)
Next S
End Sub

Gruß
Reinhard
Anzeige
Oje Oje ...
11.02.2011 10:13:31
Holger,
Hallo Rudi,
bei beiden Codes weiß ich nicht wie ich später wieder darauf zugreifen kann.
Hier der Code, der später stattfindet. Die beiden Case habe ich manuell gefüllt
aber wie kann ich hier auf die Arrays zugreifen? Ich kapiere das einfach nicht :(
Sub SoWirds
For Each rngCell In rngBrand
If rngCell.Value = strTemp Then
lngTotalUn = lngTotalUn + Cells(rngCell.Row, intSalesCol)
lngTotalAge = lngTotalAge + (Cells(rngCell.Row, intAgeCol) * Cells(rngCell.Row,  _
intSalesCol))
Select Case rngCell.Offset(0, 1).Value
Case strOpenOS1 --> HIER MÜSSEN DIE ARRAY VARIABLEN STEHEN
lngOPENOSUn = lngOPENOSUn + Cells(rngCell.Row, intSalesCol)
lngOPENOSAge = lngOPENOSAge + (Cells(rngCell.Row, intAgeCol) * Cells( _
rngCell.Row, intSalesCol))
Case strOpenOS2 --> HIER MÜSSEN DIE ARRAY VARIABLEN STEHEN
lngOthersUn = lngOthersUn + Cells(rngCell.Row, intSalesCol)
lngOthersAge = lngOthersAge + (Cells(rngCell.Row, intAgeCol) * Cells( _
rngCell.Row, intSalesCol))
End Select
End If
Next rngCell
End Sub

Anzeige
AW: Oje Oje ...
11.02.2011 10:20:51
Rudi
Hallo,
was soll ich damit?
Ich weiß nicht, wie deine Variablen belegt sind und was du erreichen willst.
Bau eine Beispielmappe, lade sie hoch und beschreibe, was du willst.
Gruß
Rudi
AW: Oje Oje ...
11.02.2011 10:30:20
Holger,
Hallo Rdui,
strOPENOS1 ist WINTER, strOPENOS2 ist SOMMER.
Das habe ich im Code vorher so festgelegt.
Aber da ich nicht weiß, ob aus dem String zwei, drei oder vier Werte
ermittelt werden, komme ich nicht so recht weiter.
Dieses grundsätzliche Problem habe ich sehr oft, nicht zu wissen
wie ich auf Arrays später zugreifen kann und wie ich es aufbauen
soll, wenn ich nicht weiß wieviele Werte es geben wird.
Denn wüßte ich das, könnte ich ja einfach diese Anzahl an
Variablen definieren, aber so?
Trotzdem Danke für deine Hilfe.
Gruß
Holger
Anzeige
AW: Oje Oje ...
11.02.2011 10:23:58
Reinhard
Hallo Holger,
benutze bitte immer Option Explicit.
Bezogen auf meinen Beispielcode dann so
Sub SoWirds()
For Each rngCell In rngBrand
If rngCell.Value = strTemp Then
lngTotalUn = lngTotalUn + Cells(rngCell.Row, intSalesCol)
lngTotalAge = lngTotalAge + (Cells(rngCell.Row, intAgeCol) * Cells(rngCell.Row,  _
intSalesCol))
Select Case rngCell.Offset(0, 1).Value
Case arrS(0)
lngOPENOSUn = lngOPENOSUn + Cells(rngCell.Row, intSalesCol)
lngOPENOSAge = lngOPENOSAge + (Cells(rngCell.Row, intAgeCol) * Cells(rngCell.Row,  _
intSalesCol))
Case arrS(1)
lngOthersUn = lngOthersUn + Cells(rngCell.Row, intSalesCol)
lngOthersAge = lngOthersAge + (Cells(rngCell.Row, intAgeCol) * Cells(rngCell.Row,  _
intSalesCol))
End Select
End If
Next rngCell
End Sub

Gruß
Reinhard
Anzeige
Aha .. aber was ist
11.02.2011 10:26:09
Holger,
Hallo Reinhard,
ok, das ist leicht zu verstehen.
Aber was ist wenn es mehr als zwei Werte gibt?
Dann bräuchte ich ja drei Cases?
AW: Aha .. aber was ist
11.02.2011 10:32:49
Reinhard
Hallo Holger,
na und, dann halt drei, wieviele können es denn werden?
Gruß
Reinhard
AW: Aha .. aber was ist
11.02.2011 10:35:52
Holger,
Genau das weiß ich ja vorher nicht.
Der String kann HERBST;WINTER;SOMMER oder HERBST;WINTER oder HERBST;WINTER;SOMMER;FRÜHLING oder oder sein.
Da liegt mein Problem, Je nach Anzahl der Werte des Strings muss ich Variablen definieren.
Anzeige
AW: Aha .. aber was ist
11.02.2011 10:47:23
Reinhard
Hallo Holger,
die Anzahl brauchst du doch gar nicht ganz genau, schau mal hier:
Sub test()
Dim arrS(2)
arrS(0) = "Herbst"
arrS(1) = "Winter"
arrS(2) = "Frühling"
Range("A1").Value = "Frühling"
Select Case Range("A1").Value
Case arrS(0)
MsgBox 0
Case arrS(1)
MsgBox 1
Case arrS(2)
MsgBox 2
Case arrS(3)
MsgBox 3
Case arrS(4)
MsgBox 4
Case arrS(5)
MsgBox 5
Case arrS(6)
MsgBox 7
Case arrS(8)
MsgBox 8
Case arrS(9)
MsgBox 9
Case Else
'Nix
End Select

Gruß
Reinhard
Anzeige
Ok
11.02.2011 10:59:14
Holger,
Hallo reinhard,
in dem Fall wäre es jetzt auf neun Werte beschränkt, richtig?
Das kann ich in diesem Fall jetzt so nehmen, Danke dafür!
Nur was wäre, wenn es z.B bis zu 100 Werte gäbe? Müßte man dann
100 Cases programmieren?
AW: Ok
11.02.2011 11:50:27
Reinhard
Hallo Holger,
gut, man könnte natürlich das ganze Select in eine eigene prozedur und Modul schreiben dann stört es nicht auch wenn da 100 Cases sind.
Die zu erzeugen ist auch einfach, siehe nachstehenden Beispielcode, danach mußte das nur noch aus der tabelle in Vba einfügen.
Das Problem was ich sehe, da sind mir sowieso vielzuviel verschiedene Variablennamen, wenn ich das recht weiß waren da pro CAse mind. zwei verschiedene Variablennamen.
Da könnte man ansetzen und die auch in ein Array packen.
Aber wahrscheinlich gibt es da noch andere Ansätze, da müßte man aber das Gesamte kennen und auch wissen was da noch geplant ist.
Das sprengt aber dann den Rahmen eines Hilfeforums.
Luc hat da etwas interessantes geschrieben, schau mal hier:
https://www.herber.de/forum/messages/1200196.html
Zu helfen aus der Ferne ist sowieso schon schwierig. Wenn dann Codeschnipsel kommen mit Variablen woman gar nicht weiß wie wo die deklariert wurden und was genau im Mment des Codeaufrufes drinsteht, erschwert das kolossal. Fehlendes Option Explicit auch.
Gruß
Reinhard

Option Explicit
Sub ErzeigeSelect()
Dim N As Integer
Cells(1, 1).Value = "Select Case Range(""A1"").Value"
For N = 2 To 202 Step 2
Cells(N, 1) = "   " & "Case arrS(" & N / 2 - 1 & ")"
Cells(N + 1, 1) = "      " & "Msgbox " & N / 2 - 1
Next N
Cells(N, 1) = "   Case Else"
Cells(N + 1, 1) = "      'Nix"
Cells(N + 1, 1) = "End Select"
End Sub

Anzeige
AW: Ok
11.02.2011 14:26:37
Holger,
Hallo reinhard,
Viel lektüre ... aber da muss ich durch auf meinem Weg ;)
Nochmal Vielen Dank!!!!
Holger
Das er dich da mal nicht...
11.02.2011 14:58:57
Luc:-?
…missversteht, Reinhard… ;-)
Gruß Luc :-?
Anzeige
AW: Zeichen in einem String zählen
11.02.2011 10:11:10
Rudi
Hallo,
wenn es um den Thread von gestern geht: Man kann die Unikate auch direkt in ein Array einlesen.
Sub yyy()
Dim x, k
x = myValues(Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp)))
For k = LBound(x) To UBound(x)
Debug.Print k, x(k)
Next
End Sub
Function myValues(rng As Range)
Dim oWert As Object, i As Long, Tmp
Set oWert = CreateObject("Scripting.dictionary")
Tmp = rng.Value
For i = 1 To UBound(Tmp)
oWert(Tmp(i, 1)) = 0
Next
myValues = oWert.keys
End Function

Gruß
Rudi
Anzeige
AW: Zeichen in einem String zählen
11.02.2011 11:12:14
Rudi
Hallo,
meine Vermutung:
du willst Summen nach Frühling, Herbst etc. bilden und dabei einen Status *open* berücksichtigen, oder?
Für den Code: Herbst etc in A, Staus in C, Umsatz in F
Sub xxx1()
Dim arrSum, i
arrSum = SumBrand(1, 3, 6, "*open*")
If IsArray(arrSum) Then
For i = 1 To UBound(arrSum)
Debug.Print arrSum(i, 1), arrSum(i, 2)
Next
End If
End Sub
Function SumBrand(lngColBrand As Long, _
lngColStatus As Long, _
lngColSales As Long, _
strStatus As String)
Dim rngBrand As Range
Dim iOffSetSTATUS As Integer, iOffSetSALES As Integer, i As Integer
Dim rngC As Range, objSum As Object, arrSum(), arrKeys
Set rngBrand = Range(Cells(2, lngColBrand), Cells(Rows.Count, lngColBrand).End(xlUp))
iOffSetSTATUS = lngColStatus - lngColBrand 'Versatz Statusspalte *open*
iOffSetSALES = lngColSales - lngColBrand 'Versatz Umsatzspalte
Set objSum = CreateObject("Scripting.Dictionary")
For Each rngC In rngBrand
If LCase(rngC.Offset(, iOffSetSTATUS)) Like LCase(strStatus) Then
objSum(rngC.Value) = objSum(rngC.Value) + rngC.Offset(, iOffSetSALES) * 1
End If
Next
If objSum.Count > 0 Then
arrKeys = objSum.keys
ReDim arrSum(1 To objSum.Count, 1 To 2)
For i = 0 To UBound(arrKeys)
arrSum(i + 1, 1) = arrKeys(i)
arrSum(i + 1, 2) = objSum(arrKeys(i))
Next
SumBrand = arrSum
End If
End Function

Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeichen in einem String zählen


Schritt-für-Schritt-Anleitung

Um die Anzahl der Zeichen in einem String in Excel VBA zu zählen, kannst Du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf einen der Einträge im Projekt-Explorer, wähle Einfügen und dann Modul.

  3. Füge den Code ein: Kopiere und füge den folgenden Code in das Modul ein:

    Function zeichenZaehlen(text As String) As Long
       zeichenZaehlen = Len(text)
    End Function
  4. Nutze die Funktion: Du kannst die Funktion in einer Zelle verwenden, indem Du zum Beispiel =zeichenZaehlen(A1) eingibst, wobei A1 die Zelle ist, die den String enthält.


Häufige Fehler und Lösungen

  • Fehler: Funktion gibt einen Fehler zurück: Stelle sicher, dass Du im VBA-Editor Option Explicit verwendet hast, um sicherzustellen, dass alle Variablen deklariert sind.

  • Fehler: Falsche Anzahl an Zeichen: Überprüfe, ob im String ungewollte Leerzeichen oder unsichtbare Zeichen vorhanden sind, die die Zählung beeinflussen könnten.

  • Lösung: Zeichen zählen: Um die Anzahl bestimmter Zeichen in einem String zu zählen, kannst Du die folgende Funktion verwenden:

    Function anzahlBestimmteZeichen(text As String, zeichen As String) As Long
       Dim i As Long
       Dim count As Long
       count = 0
       For i = 1 To Len(text)
           If Mid$(text, i, 1) = zeichen Then
               count = count + 1
           End If
       Next i
       anzahlBestimmteZeichen = count
    End Function

Alternative Methoden

Eine weitere Methode, um Zeichen zu zählen, ist die Verwendung von SQL in einer Abfrage, wenn Du mit einer Datenbank arbeitest. Hier ein Beispiel für die SQL-Syntax:

SELECT LENGTH(column_name) - LENGTH(REPLACE(column_name, ';', '')) AS AnzahlSemikolons
FROM deineTabelle;

Diese Abfrage zählt die Anzahl der Semikolons in einer bestimmten Spalte column_name der Tabelle deineTabelle.


Praktische Beispiele

  1. Zählen der Semikolons in einem String:

    Function semikolonZaehlen(text As String) As Long
       semikolonZaehlen = anzahlBestimmteZeichen(text, ";")
    End Function
  2. Zählen der Buchstaben: Um zu zählen, wie oft ein bestimmter Buchstabe in einem String vorkommt, verwende die Funktion anzahlBestimmteZeichen mit dem gewünschten Buchstaben:

    Dim anzahl As Long
    anzahl = anzahlBestimmteZeichen("Herbst;Winter;Sommer", "e")
    MsgBox "Der Buchstabe 'e' kommt " & anzahl & " Mal vor."

Tipps für Profis

  • Verwende Option Explicit: Dies hilft Dir, Fehler durch nicht deklarierte Variablen zu vermeiden und erhöht die Lesbarkeit deines Codes.

  • Optimierung des Codes: Wenn Du sehr große Strings hast, versuche, die Anzahl der Iterationen zu minimieren, indem Du vor dem Zählen sicherstellst, dass der String die erwartete Länge hat.

  • Verwende Arrays für mehrere Werte: Wenn Du mehrere Werte aus einem String extrahieren möchtest, nutze das Split-Array, um die Werte in Variablen zu speichern.


FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Zeichen in einem String zählen?
Du kannst die Len()-Funktion in VBA verwenden, um die Anzahl der Zeichen zu zählen: Len("Dein Text").

2. Wie zähle ich bestimmte Zeichen in einem String?
Verwende eine Schleife zusammen mit der Mid()-Funktion, um jedes Zeichen zu überprüfen und die Anzahl zu erhöhen, wenn das gesuchte Zeichen gefunden wird.

3. Kann ich auch Leerzeichen zählen?
Ja, du kannst die gleiche Methode verwenden, um Leerzeichen oder andere Zeichen zu zählen, indem du das gewünschte Zeichen in die Funktion einfügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige