Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Alle Fundstellen in einem String in einem neuen String ausgeben
#11
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
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Antworten Top
#12
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.
Antworten Top
#13
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
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • Schülerin
Antworten Top
#14
Hallöchen,
Du wolltest doch zuletzt eine rekursive Lösung?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Schülerin
Antworten Top
#15
@Schauan,

War wäre das Ergebnis Unterschied in 'Abra Kadabra' rekursiv und nicht-rekursiv ?
Antworten Top
#16
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 ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#17
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!
Antworten Top
#18
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
Antworten Top
#19
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.
Antworten Top
#20
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
Antworten Top


Gehe zu:


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