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

Suchen - Ersetzen mit Bedingung

Suchen - Ersetzen mit Bedingung
29.11.2016 07:15:55
Jaylan
Hallo zusammen,
ich habe zwei unterschiedliche Strings, die Artikelbezeichnungen darstellen.
Nun soll je nach Artikeltyp, die Zeichenkette wie folgt extrahiert und in die gleiche Zelle geschrieben werden:
Typ 1:
004055238 04FG13 ABC; PPP Auftragsnr. Schraubendr. --> 055238
Typ 2:
004S_2356-68 ART - Schraubendreher 210 --> S_2356-68
Für Typ 1 habe ich bereits ein Makro. Jedoch wird der Typ 2 auch so ausgeschnitten, ohne dass der Stringtyp ermittelt wird. Wie kann ich eine Wenn-Dann Bedingung aufstellen, so dass je nach Typ der String richtig extrahiert wird?
Für Typ 1 sieht das so aus:

Set r = Intersect(Range("A:A"), ActiveSheet.UsedRange)
If Not r Is Nothing Then
For Each c In r
If c.Value  "" And Len(c.Value) > 10 Then _
c.Value = "'" & Right(Left(c.Value, InStr(c.Value, " ") - 1), 4)
Next
Else
MsgBox "Not Exists"
End If

Jetzt brauche ich noch eine Wenn-Dann-Bedingung, welche den Unterschied zwischen den beiden Typen macht sowie den Code für die Extraktion aus Typ 2.
Ich hoffe, dass mein Problem verständlich ist.
Anbei eine Beispiel-Datei mit Dummy-Daten.
https://www.herber.de/bbs/user/109776.xlsx
Die Strings die extrahiert werden sollen, habe ich Dick-Markiert.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchen - Ersetzen mit Bedingung
29.11.2016 08:06:24
Daniel
Hi
Das Trennverfahren für beide Typen wäre hier
- ab dem 4.Zeichen bis zum ersten Leerzeichen:
c.value = Mid(c.value, 4, Instr(c.value, " ") - 3)
Alternativ könntest du hier auch 2x Daten - Datentools - Text in Spalten auf die Spalte anwenden, was bei größeren Datenmengen wesentlich schneller ist.
Beim ersten mal trennst du mit
- getrennt + Leerzeichen als Trennzeichen und übernimmst nur die erste Spalte
Beim zweiten Mal trennst du mit
- fester Breite. Trenner nach dem 3. Zeichen und übernimmst die zweite Spalte.
Das geht auch mit Macro, der Recorder ist dein Freund.
Gruß Daniel
Anzeige
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 07:17:21
Jaylan
Hallo nochmal,
jetzt habe ich wohl einen Fehler gemacht... Typ 1 soll wie folgt extrahiert werden:
004055238 04FG13 ABC; PPP Auftragsnr. Schraubendr. --> 5238
Typ 2 ist richtig, wie oben.
Also brauche ich doch irgendeine Bedingung zur Typ-Unterscheidung. Kann mir da jemand helfen?
Gruß
Jaylan
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 07:43:01
hary
Moin
Mit Daniel kann ich VBA maessig nicht mithalten. Aber hier mal meine Uebung.
Die betr. Zellen markieren und Makro starten. Ausgabe erfolgt i.M. in Msgbox
Sub Versuch()
Dim Regex As Object
Dim objMatch As Object
Dim zelle As Range
For Each zelle In Selection '---ausgewaehlte Zellen
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "((S_)\d+(-)\d+ |\d+ )"
.Global = True
Set objMatch = .Execute(zelle)
If objMatch.Count > 0 Then 'prüft ob Pattern enthalten
MsgBox IIf(Left(objMatch(0).Value, 1) = "S", objMatch(0).Value, Right(objMatch(0).Value, _
5))
End If
End With
Next
End Sub

gruss hary
Anzeige
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 07:51:51
Jaylan
Hallo Hary,
vielen Dank für deinen Lösungsvorschlag!
Kriegt das jemand vielleicht bereits in meinen Code hin?
LG
Jaylan
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 08:10:55
hary
Moin
Ansatzweise so.
If c  "" And Len(c) > 10 Then
If Mid(c, 4, 1) = "S" Then '--pruefen ob S in Text an 4.Stelle
c = Mid(c, InStr(1, c, "S"), InStr(c, " ") - 3)
Else
c = "'" & Right(Left(c, InStr(c, " ") - 1), 4)
End If
End If

gruss hary
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 10:26:44
Jaylan
Vielen Dank Hary,
nun bekomme ich folgende Fehlermeldung:
Laufzeitfehler '5': Ungültiger Prozeduraufruf oder ungültiges Argument
Mein Code:
Sub Test()
Dim r As Range, c As Range
With Sheets("Tabelle1")
Set r = Intersect(Range("A:A"), ActiveSheet.UsedRange)
If Not r Is Nothing Then
For Each c In r
If Mid(c, 4, 1) = "S" Then
c = Mid(c, InStr(1, c, "S"), InStr(c, " ") - 3)
Else
c = "'" & Right(Left(c, InStr(c, " ") - 1), 4)
End If
Next
Else
MsgBox "Keine gefunden"
End If

Anzeige
AW: Suchen - Ersetzen mit Bedingung
02.12.2016 11:31:05
hary
Moin
Du verwendest with Anweisung und referenzierst nicht mit einem Punkt.
Der Fehler kommt wenn z.B. Zelle leer oder schon umgewandelt.
Probier so.
Dim r As Range, c As Range
With Sheets("Aufträge")' "" And Len(c) > 10 Then
If Mid(c, 4, 1) = "S" Then
c = Mid(c, InStr(1, c, "S"), InStr(1, c, " ") - 3)
Else
c = "'" & Right(Left(c, InStr(1, c, " ") - 1), 4)
End If
End If
Next
Else
MsgBox "Keine gefunden"
End If
End With

gruss hary
AW: Suchen - Ersetzen mit Bedingung
03.12.2016 13:31:30
Jaylan
Super, vielen Dank!

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige