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.

Excel vba: Suchmechanismus
#1
Hallo zusammen,
ich hätte da mal wieder eine für mich nicht lösbare Frage.
Wie kann ich per vba aus einem String der z.B. so aussieht:
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000RB*=
die viert- und drittletzte Stelle finden? Aber nur die, denn wie Ihr seht kommt dieses "RB" nochmals im String vor.
Es sollen also nur diese letzten Stellen, am Ende des Strings, gesucht werden und das auch noch nur in einer anzugebenden Spalte (nicht im ganzen Blatt) und ab einer bestimmten Zeile nach unten.


Gibt es da eine Möglichkeit, wobei ich den Focus gerne auf vba legen möchte?

Dank für Eure Hilfe!!!
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#2
Hallo Erich,

ich verstehe Dich nicht ganz ...

Ansonsten obersimpel so:
=LINKS(RECHTS(A1;4);2)


Gruß Carsten
Antworten Top
#3
Hallo Erich,
Sub aaa()
Dim strQ As String, strZ As String
strQ = "3#4N0907063BG #H010S0625#*K09RB8-03306.04.17174000RB*="
strZ = Mid(strQ, Len(strQ) - 3, 2)
Debug.Print strZ
End Sub
Gruß Uwe
Antworten Top
#4
Hallo Carsten,

danke für die Rückmeldung.

Die Formel kenne ich....benötige aber unbedingt vba!

Zum Verständnis - ich habe hunderte dieser Strings zu durchsuchen - z.B.:
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000ON*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R5*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R7*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R8*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000RA*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R9*=
3#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000RB*=
usw.......
Ich benötige aber nur die besagten letzen rechten Stellen 4 & 3. Wenn aber zufällig diese letzten zwei Stellen nochmals in irgendwo vorkommen habe ich ein Problem mit der nachfolgenden Auswertung.
Der Focus der Frage liegt nicht darauf die zwei Stellen aus den String zu extrahieren sondern ihn "nur"zu finden - und zwar unter den Bedingungen wie ich eingangs beschrieben habe.
Nur in Spalte "A" ab einer anzugebenden Zeile.

Nicht einfach zu erklären das Ganze.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#5
Hi,

das geht wohl am einfachsten mit einer Formel:


Arbeitsblatt mit dem Namen 'Blatt 2'
 GH
10 zeile: 17
113#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000ON*= 
123#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R5*= 
133#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R7*= 
143#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R8*= 
153#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000RA*= 
163#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000R9*= 
173#4N0907063BG   #H010S0625#*K09RB8-03306.04.17174000RB*= 

ZelleFormel
H10="zeile: "&VERGLEICH("*RB??";G10:G993;0)+9
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Das kannst Du aber gerne in VBA übersetzen!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#6
Hallo Uwe,

vielen Dank für den Code. Das funktioniert natürlich perfekt.

Aber wie ich Carsten geantwortet habe soll nur nach den beschriebenen Kriterien gesucht werden - und eventuell in die Zelle rechts daneben ein Eintrag wie "Status1" eingetragen werden.

Der Hintergedanke ist, aus einer Fülle von Daten-Strings bestimmte Strings zusammenzufassen und jeder Fundstelle mit z.B. "Status1" zu kennzeichnen.
Die Daten-Strings bekomme ich immer in unterschiedlicher Anzahl und es kann durchaus sein, dass ein Suchbegriff schon einmal vorkommt. Deshalb soll auch der Suchbereich ab einer bestimmten Zeile eingeschränkt werden können und ab hier nur nach unten in dieser einen Spalte weitergesucht wird.

Vielleicht noch eine Idee?
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top
#7
Hallo Erich,

so langsam wird Die Aufgabenstellung klarer, aber noch nicht ganz.
Suchst Du immer nach 'RB'? Eher wahrscheinlich nach Duplikaten einer Paarung ...
Oder in allen Neuankömmlingen nach Duplikaten eines Paares? Oder auch in allen schon vorhandenen? Oder in beiden ...?

Ich kann die konkrete Aufgabe leider noch nicht richtig erkennen.


Gruß Carsten
Antworten Top
#8
Hallo zusammen,

ich habe es so verstanden:


Code:
Sub suchen()
Dim i As Long
Dim lngLetzte As Long
Dim lngBeginn As Long
Dim strgSuchText As String
Dim strgAusgabeText As String

lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row
lngBeginn = 3
strgSuchText = "RB"
strgAusgabeText = "status1"

Columns("B").ClearContents 'Spalte B zum Schreiben leeren
For i = lngBeginn To lngLetzte
  If Cells(i, 1) Like "*" & strgSuchText & "??" Then Cells(i, 2) = strgAusgabeText
Next i

End Sub
Hallo noch mal,
man brauch die Verrenkungen mit Like gar nicht machen (bin gerade auf einem Like Tripp)
Es geht natürlich so wie bei Uwe mit Mid()

Code:
Sub suchen()
Dim i As Long
Dim lngLetzte As Long
Dim lngBeginn As Long
Dim strgSuchText As String
Dim strgAusgabeText As String

lngLetzte = Cells(Rows.Count, 1).End(xlUp).Row
lngBeginn = 3
strgSuchText = "RB"
strgAusgabeText = "status1"

Columns("B").ClearContents 'Spalte B zum Schreiben leeren

For i = lngBeginn To lngLetzte
 If Mid(Cells(i, 1), Len(Cells(i, 1)) - 3, 2) = strgSuchText Then Cells(i, 2) = strgAusgabeText
Next i

End Sub
Gruß Atilla
Antworten Top
#9
Hallo Atilla,

soweit ist das mir schon klar.
Aber diese Codezeilen sind zwar richtig, aber doch etwas sinnlos, da nicht variabel.
Nicht variabel, damit meine ich, dass nur nach RB gesucht werden kann und man nur ab der dritten Zeile anfangen kann.

Die Sub/Funktion muss von außen ansteuerbar sein und am besten gleich alle Importe und/oder vorhandenen Strings durchsuchen.

Ich habe aus der Fragestellung nicht verstanden, ob nur nach Strings mit 'RB' gesucht wird oder von allen Pärchen nach Duplikaten. Und das nur in den Importen oder auch in den vorhandenen. Oder ...
Und wo stehen die Importe, wo stehen die vorhandenen?

Wie soll die Funktion aufgerufen werden, damit diese ab einer bestimmten Zeile suchen kann ...
Sollen gleich alle Zeilen verarbeitet werden, wie soll die Ausgabe sein, ... ?
Etc. pp.



Gruß Carsten
Antworten Top
#10
Hallo,

noch ein Erklärungsversuch:
Nein ich suche natürlich nicht immer nur nach "RB" - das war nur ein Beispiel.
Ich suche in allen Strings die ich von einer Datenübertragung erhalte nur diese dritt- und viertletzten Ziffern oder Zahlen.
Also in allen Neuankömmlingen und auch in allen schon vorhandenen.
Mit freundlichen Grüßen / Best regards
                          //
----------o00o---°(_)°---o00o----------------------

Erich
Antworten Top


Gehe zu:


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