Clever-Excel-Forum

Normale Version: Alle Fundstellen in einem String in einem neuen String ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Code:
Sub M_snb()
   sn = Split("Abra Kadabra", "a", , 1)
   
   For j = 1 To UBound(sn) - 1
     c00 = c00 & sn(j) & "a"
     c01 = c01 & "," & Len(c00) + 1
   Next
   
   MsgBox Mid(c01, 2)
End Sub
Oder
Code:
Sub M_snb()
   c00 = "Abra Kadabra"

   For j = 1 To Len(c00)
      c01 = c01 & "," & InStr(Application.Substitute(c00, "a", "~", j), "~")
      If Right(c01, 2) = ",0" Then Exit For
   Next

   MsgBox Mid(c01, 2, Len(c01) - 3)
End Sub
oder
Code:
Sub M_snb()
   Names.Add "snb", "Abra Kadabra"

   MsgBox Join(Filter([transpose((mid(substitute(snb,"a","~"),row(1:100),1)="~")*row(1:100))], 0, 0), ",")
End Sub
Hallo Snb,

sehr interessante Lösungsvorschläge von dir. Leider für meine VBA Kenntnisse zu hoch.  Deshalb gleich mal meine erste Frage. Ich möchte den Code allgemeiner
halten und nach beliebigen Zeichen in dem gegeben String suchen.  Also habe ich deinen Code etwas modifiziert:


Code:
Sub NewLSG2()
Dim strSuch As Variant
strSuch = "a"

Names.Add "snb", "Abra Kadabra und andere Zaubereien"

Debug.Print Join(Filter([transpose((mid(substitute(snb, strSuch,"~"),row(1:100),1)="~")*row(1:100))], 0, 0), ",")

End Sub

Obwohl ich den Suchstring strSuch als Variant deklariert habe meldet mir der Compiler Typenunverträglichkeit. Es wäre sehr nett von dir, wenn du deinen Code so umgestalten würdest, dass man über strSuch = irgendwas! ein beliebiges Zeichen aus dem angegeben String "Abra Kadabra und andere Zaubereien" suchen könnte.
Code:
Sub M_snb()
   Names.Add "snb", "Abra Kadnabra etcetera"
   Names.Add "s_b", "a"
   
   MsgBox Replace(Join(Filter([transpose((mid(substitute(snb,s_b,"~"),row(1:100),1)="~")*-row(1:100))], "-")), "-", "")
End Sub
Hallöchen,
Du wolltest doch zuletzt eine rekursive Lösung?
@Schauan,

War wäre das Ergebnis Unterschied in 'Abra Kadabra' rekursiv und nicht-rekursiv ?
Hallöchen,

wäre schlimm, wenn im Ergebnis einer wäre. Der Unterschied ist die Aufgabe. War ja nach den ersten Lösungen als zusätzliche Frage gestellt ...
Hallo Leute,
allen nochmals vielen Dank.
!!!! Leider ist mir bezüglich meines Codes und der Aufgabenstellung hier ein dicker Fehler unterlaufen. Den möchte ich hier korregieren!!!



Code:
Sub String_in_String()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer
strString = "Das Clever-Excel Forum gibt viele super Tipps. Es ist ein super Forum!"
strSuch = "Forum"

For intA = 1 To Len(strString)
If Mid(strString, intA, Len(strSuch)) = strSuch Then strErgebnis = strErgebnis & intA & ","
Next

Debug.Print Mid(strErgebnis, 1, Len(strErgebnis) - 1)

End Sub

Wichtig:
Code:
!!! Mid(strString, intA, Len(strSuch)) !!!!

statt der 1 muss es Len(strSuch) heißen, da es sich ja hier um eine String in String-Suche handeln soll und nicht nur einzelne Zeichen gesucht werden sollen.
Diese Formulierung ist allgemeiner und wesentlich besser. Den Cracks hier ist das sicherlich egal, aber das Forum soll ja für alle Leute so gut wie möglich lesbar sein.
Sorry!
Bleibt 'ungeändert':


Code:
Sub M_snb()
   Names.Add "snb", "Abra Kadnabra etcetera"
   Names.Add "s_b", "et"
   
   MsgBox Replace(Join(Filter([transpose((mid(substitute(snb,s_b,"~"&mid(s_b,2,len(s_b))),row(1:100),1)="~")*-row(1:100))], "-")), "-", "")
End Sub
Hallöchen,

um die erste Position und die Ziffer in einem String mit Zahlen zu finden habe ich folgenden Code entwickelt:


Code:
Sub Erste_Position_und_erste_Ziffer_einer_Zahl_in_einem_String()
Dim strString As String, intA As Integer

strString = "Meine Vorwahl ist 089 und ich lebe in München."
For intA = 1 To Len(strString)
If InStr("1234567890", Mid(strString, intA, 1)) > 0 Then Exit For
Next intA
Debug.Print "Position: " & intA & " Zahl: " & Mid(strString, intA, 1)

End Sub
Vielleicht geht so etwas auch noch besser und kürzer. Lösungsvorschläge sind wie immer willkommen.

Vor allem suche ich aber nach einer Lösungsmöglichkeit um alle Positionen von Zahlengruppen samt der Zahlengruppe im String selbst zu ermitteln.
Der folgende Beispielsatz samt Lösungsstring, soll verdeutlichen was ich damit meine.
Beispielsatz: strString = "Wir haben 825 Tonnen, 4689 Kilogramm und 22 Pfund an Lebensmittel gekauft."
Lösungstring:   Position 10 Zahl 825, Position 22 Zahl 4689, Position 41 Zahl 22

Wie immer haben einige von euch dafür sicherlich die interessantesten Lösungsvorschläge.
Hallo,

habe mal folgend Lösung entwickelt. Ich hoffe ihr habt weitere Lösungen.


Code:
Sub Positionen_aller_Zahleninseln_in_einem_String()
Dim strString As String, strSuch As String, strErgebnis As String, intA As Integer
strString = "Wir haben 825 Tonnen, 4689 Kilogramm und 22 Pfund an Lebensmittel gekauft."

For intA = 1 To Len(strString)
If IsNumeric(Mid(strString, intA, 1)) Then
strErgebnis = strErgebnis & ", Position: " & intA & " Zahl: " & Mid(strString, intA, 1)

While (IsNumeric(Mid(strString, intA, 1)))
intA = intA + 1
strErgebnis = strErgebnis & Mid(strString, intA, 1)
Wend
End If

Next

Debug.Print Mid(strErgebnis, 2, Len(strErgebnis))

End Sub
Seiten: 1 2 3