Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1660to1664
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

String mit Zeichen zwischen jedem Zeichen versehen

String mit Zeichen zwischen jedem Zeichen versehen
18.12.2018 09:15:34
Christian
Hallo zusammen,
ich brauche folgende Funktion:
In ein Suchfenster wird eine beliebig formatierte Seriennummer eingeben. Ich habe eine Funktion, welche alle Sonderzeichen daraus entfernt. Nun brauche ich eine Funktion, die diesen neuen String am Anfang und am Ende mit einem * versieht und zwischen jedem Zeichen ein ? setzt.
Also aus der Eingabe erhält man 1234-5678/9.12 daraus wird - 12345678912 und daraus soll werden - *1?2?3?4?5?6?7?8?9?1?2*
vielen Dank für eure Hilfe!!
Mit freundlichem Gruß
Christian K

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: String mit Zeichen zwischen jedem Zeichen versehen
18.12.2018 09:28:21
UweD
Hallo
per VBA
Sub Fragezeichen()
    Dim Eingabe As String, Neu As String, i As Integer
    Eingabe = "12345678912"
    For i = 1 To Len(Eingabe) - 1
        Neu = Neu & Mid(Eingabe, i, 1) & "?"
    Next
    
    Neu = "*" & Neu & Right(Eingabe, 1) & "*"
    MsgBox Neu
End Sub

LG UweD
Anzeige
AW: String mit Zeichen zwischen jedem Zeichen versehen
18.12.2018 11:37:12
Christian
Super genau was ich gesucht habe!!
vielen Dank Uwe :)
Mit freundlichem Gruß
Christian K
Prima! Danke für die Rückmeldung. owT
18.12.2018 11:41:55
UweD
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 12:42:21
Christian
Ich habe nun ein etwas anderes Problem...
Diesen String möchte ich benutzen, um im Worksheet "Serialnr. List" Spalten auf diesen String zu durchsuchen. Ich habe mit der Makroaufzeichnung diesen Suchbefehl durchgeführt und dieser hat mir folgenden Code gegeben:
Cells.Find(What:=ser_num_regex, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Wenn ich versuche dieses mit einem Makro auszuführen bekomme ich den Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt.
was muss ich beachten damit ich mein String suchen kann?
LG
Christian K
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:00:48
UweD
Hallo nochmal
Was willst du denn mit den Fundstellen machen?
Beispielmappe wäre gut..
LG UweD
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:10:29
Christian
Hallo,
also bin seit gestern erst hier im Forum und weiß nicht wie ich diese beispielmappe erstelle und die Mappe an der ich arbeite enthält einige sensible Daten. Ich versuche es einfach mal zu beschreiben :
Also habe ein Tabbelensheet namens "Serialnr. List", in dem zu mehreren Projekten in einer Spalte jeweils die Seriennummern eines verbauten Teils eingetragen werden. Auf einem Tabellensheet "GUI" habe ich einige Buttons angebracht mit verschiedenen Funktionen. In diesem Blatt habe ich eine Zelle in der man eine Seriennummer eintragen kann und daneben ein Button, welcher auf Betätigung eine Suche nach der eingegebenen Nummer startet. Das ganze Spiel mit den ? oder * brauche ich, da der Endanwender die Seriennummer möglicherweise nicht genau nach Typenschild abgetragen hat und damit man trotzdem die richtige Nummer findet wollte ich dies mit regulären Ausdrücken realisieren.
Also wird nun im Eingabefeld "1234-5678/9.12" eingegeben und wenn man auf diesen Button klickt soll man zur Zelle mit dieser Nummer springen. Das selbe wie mit der Manuellen Suche. Wenn ich bei der manuellen Suche nach "*1*2*3*4*5*6*7*8*9*1*2*" suche klappt dies auch wie gewünscht.
Jedoch funktioniert das Makro mit dem eben beschriebenen Code für die Suche nicht und gibt die Fehlermeldung 91 ab.
Sorry für den langen Text aber ich hoffe es wird klarer :)
LG
Christian K
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:23:04
Daniel
Hi
dann solltest du auch in der Makrosuche nicht nach "*1?2?3?4?5?6?7?8?9?1?2*" suchen, sondern nach ebenso wie in deiner Manuellen Suche nach "*1*2*3*4*5*6*7*8*9*1*2*"
? ist das Jokerzeichen für genau ein beliebiges Zeichen
* ist das Jokerzeichen für beliebige Zeichen in beliebiger Anzahl, auch keines.
wenn in der Tabelle "12" steht, dann findest du mit der Suche nach "1*2" diesen Wert, mit der Suche nach "1?2" hingegen nicht
Gruß Daniel
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:27:29
Christian
Hi,
ja das ist mir auch sofort aufgefallen und ich habe dies auch geändert. Ich habe nun mit der Suchfunktion von Daniel versucht .. der Laufzeitfehler springt nicht mehr auf, jedoch springe ich nicht in meine gewünschte Zelle.
Mit freundlichem Gruß
Christian K
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:27:33
UweD
Man kann in der Originaldatei einige Wenige Datensätze stehen lassen und ggf. noch verfremden.
Überflüssige Tabellenblätter löschen usw.
Wichtig ist nur, die Struktur usw. wie im Original zu belassen.
Dann über den Button "Zum File-Upload" die Datei hochladen und den link dann im Text einfügen.
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 14:26:03
UweD
Hallo
so?
Sub Seriennummer()
    Dim Zelle As Range, firstAddress As String
    
    'Automatisierung per Button 
    ser_num = Sheets("GUI").Range("B20").Value
    Debug.Print "ser_num = " & ser_num
    ser_num_no = ohne_sonder(ser_num)
    Debug.Print "ser_num_no = " & ser_num_no
    ser_num_regex = sernum_regex(ser_num_no)
    Debug.Print "ser_num_regex = " & ser_num_regex

    
    With Sheets("Serialnr. List")
        Set Zelle = .Cells.Find(What:=ser_num_regex, After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
        If Not Zelle Is Nothing Then
            firstAddress = Zelle.Address
            Do
                Zelle.Select
                MsgBox "weiter"
                'mach was damit 
                    
                Set Zelle = .Cells.FindNext(Zelle)
            Loop While Not Zelle Is Nothing And Zelle.Address <> firstAddress
        
        Else
            MsgBox ser_num & " nicht vorhanden."
        End If
        Debug.Print "Ende"
        
    End With
    'Cells.Find(What:=ser_num_regex, After:=ActiveCell, LookIn:=xlValues, _
     '   LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      '  MatchCase:=False, SearchFormat:=False).Activate 
    
End Sub

LG UweD
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:01:42
Daniel
Hi
wenn die Zellwerte durch Formeln erzeugt werden, dann musst du in den Zellwerten suchen und nicht in den Formeltexten: LookIn:=xlValues
ansonsten muss halt sichergestellt sein, dass der gesuchte Text vorhanden ist.
ist das nicht sicher, würde ich so programmieren, um das entsprechend abzufangen:

Dim Zelle as Range
set Zelle = Cells.Find(What:=ser_num_regex, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Zelle is Nothing then
Msgbox ser_num_regex & " nicht vorhanden."
Else
Zelle.Select
End if
ansonsten ist dir schon klar, dass "?" der Joker für genau ein Zeichen ist?
dh wenn du nach "1?2" suchst, wird "12" nicht gefunden.
Gruß Daniel
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:49:43
Christian
Ich habe den Fehler nun gefunden!
Es funktioniert alles einwandfrei nur springt er in die Zelle in der Ich die Sucheingabe eingebe.
Gibt es die Möglichkeit nach weiteren Ergebnissen zu suchen? Also wie bei der Manuellen suche auf "Weitersuchen" klicken?
LG
Christian K
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:49:44
Christian
Ich habe den Fehler nun gefunden!
Es funktioniert alles einwandfrei nur springt er in die Zelle in der Ich die Sucheingabe eingebe.
Gibt es die Möglichkeit nach weiteren Ergebnissen zu suchen? Also wie bei der Manuellen suche auf "Weitersuchen" klicken?
LG
Christian K
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 14:04:09
Daniel
Ja, man muss schon auf der richtigen Seite suchen.
Weitersuchen so:
Sub Seriennummer()
Dim Zelle As Range
'Automatisierung per Button
ser_num = Range("B20").Value
Debug.Print "ser_num = " & ser_num
ser_num_no = ohne_sonder(ser_num)
Debug.Print "ser_num_no = " & ser_num_no
ser_num_regex = sernum_regex(ser_num_no)
Debug.Print "ser_num_regex = " & ser_num_regex
Sheets("Serialnr. List").Select
Set Zelle = Cells.Find(What:=ser_num_regex, After:=Cells(1, 1), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
If Zelle Is Nothing Then
MsgBox ser_num & " nicht vorhanden."
Else
Zelle.Select
If WorksheetFunction.CountIf(Cells, ser_num_regex) > 1 Then
Do While MsgBox("Weitere Werte vorhanden, nächsten anzeigen?", vbYesNo) = vbYes
Cells.FindNext(ActiveCell).Select
Loop
End If
End If
Debug.Print "Ende"
End Sub
Gruß Daniel
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 14:35:25
Christian
Super das funktioniert prima!
Vielen dank an Daniel und Uwe für eure Hilfe! :)
Liebe Grüße und schönen Tag noch
Christian K
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:49:46
Christian
Ich habe den Fehler nun gefunden!
Es funktioniert alles einwandfrei nur springt er in die Zelle in der Ich die Sucheingabe eingebe.
Gibt es die Möglichkeit nach weiteren Ergebnissen zu suchen? Also wie bei der Manuellen suche auf "Weitersuchen" klicken?
LG
Christian K
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 12:56:40
Christian
Mir ist jetzt wohl aufgefallen, dass wenn ich versuche ein String wie "*1?2?3?4?5?6?7?8?9?1?2*" manuell zu suchen, es fehlschlägt und dies mit den ? zusammen hängt. Ersetzt man diese durch * dann klappt das ganze.
Nur die eben angesprochene cells.find Funktion streikt weiterhin wie beschrieben..
Weiterhin vielen Dank für die Hilfe
LG
Christian K
Anzeige
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:03:13
UweD
Hallo
Du musst vor das Fragezeichen noch eine Tilde setzen, also nach "~?" suchen
LG UweD
AW: Prima! Danke für die Rückmeldung. owT
18.12.2018 13:12:46
Christian
Also zwischen den Zeichen immer ~? einfügen?
Aus 12345678912 wird dann *1~?2~?3~?4~?5~?6~?7~?8~?9~?1~?2* ? Und dies als Suchstring verwenden?
LG
s.O.
18.12.2018 13:23:28
UweD

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige