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

VBA: Textsuche und aufsplitten

VBA: Textsuche und aufsplitten
26.10.2018 08:36:26
Bernd
Hallo zusammen,
ich habe ein kleineres Problem mit einer Datei und komme im Moment einfach nicht auf ein passendes Ergebnis. Daher erhoffe ich mir von euch etwas Hilfe :-)
Ich habe eine Liste mit mehreren Anforderungen, die ich prüfen und bearbeiten muss.
In den einzelenen Anforderungen sind immer wieder gesetzliche und kundenspezifische Normen enthalten. Genau diese Normen möchte ich gerne per Makro auslesen und in separate Zellen schreiben.
Wenn ich alle verwendeten Normen vollständig kennen würde wäre es für mich machbar, aber ich kenne meist gerade einmal die Anfangskategorie (z.B. ISO 9... anstelle ISO 9000; Din 3... anstelle DIN 3002; usw.).
Da jede Anforderung gerne auch mal mehrere Normen beinhaltet bekomme ich das nicht hin :-(
Im Anhang eine Beispieldatei.
https://www.herber.de/bbs/user/124920.xlsm
Ich hoffe ihr könnt mir helfen.
Danke und Grüße, Bernd

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Textsuche und aufsplitten
26.10.2018 09:03:01
Robert
Hallo Bernd,
nachstehendes Makro durchsucht die Zellen von A2 abwärts. Wenn in den Zellen die Wörter "ISO" oder "DIN" gefunden werden, wird ab der Spalte D diese Norm (also ISO oder DIN) und die Nummer der Norm (also die Zahl rechts neben dem gefundenen Wert) ausgegeben.
Sub Normen()
Dim lZ As Long, i As Integer, j As Long, k As Long, strTmp
lZ = Range("A" & Rows.Count).End(xlUp).Row
For j = 2 To lZ
strTmp = Split(Range("A" & j), " ")
k = 4
For i = 1 To UBound(strTmp)
If strTmp(i) = "ISO" Or strTmp(i) = "DIN" Then
Cells(j, k) = strTmp(i) & " " & strTmp(i + 1)
k = k + 1
End If
Next i
Next j
End Sub
Gruß
Robert
Anzeige
AW: VBA: Textsuche und aufsplitten
26.10.2018 10:09:27
Bernd
Servus Robert,
Danke für den Vorschlag.
Wie müsste ich den Code umbauen, wenn ich nicht starr nach "ISO" und "DIN" und als Trennzeichen " " suchen möchte, sondern die Suchbegriffe in einer Spalte der Tabelle habe (siehe Beispiel im Anhang vom Ausgangspost: "DIN 3", "ISO 9", aber auch z.B. "VA 3", "AA 3", "Haumichblau 6").
Ich habe versucht deinen Code
If strTmp(i) = "ISO" Or strTmp(i) = "DIN" Then 
entsprechend zu ergänzen, das hat aber nicht funktioniert :(
If strTmp(i) = "ISO 9" Or strTmp(i) = "DIN 3" Or strTmp(i) = "AA 3" ... Then
Danke und Grüße, Bernd
Anzeige
AW: VBA: Textsuche und aufsplitten
26.10.2018 09:08:36
Sepp
Hallo Bernd,
Modul Modul1
Option Explicit 
 
Sub splitText() 
  Dim varSearch As Variant, varText As Variant, varResult() As Variant 
  Dim lngIndex As Long, lngN As Long, lngPos As Long, lngEnd As Long, lngM As Long 
   
  varSearch = Array("DIN", "ISO") 'gesuchte Normen-Kürzel 
 
  With Sheets("Tabelle1") 
    varText = .Range("A2:A" & .Cells(.Rows.Count, 1).End(xlUp).Row) 
    Redim varResult(1 To Ubound(varText, 1), 1 To 20) 
    For lngIndex = 1 To Ubound(varText, 1) 
      lngPos = 0 
      lngM = 0 
      For lngN = Lbound(varSearch) To Ubound(varSearch) 
        Do 
          lngPos = InStr(lngPos + 1, varText(lngIndex, 1), varSearch(lngN), vbTextCompare) 
          lngEnd = InStr(lngPos + Len(varSearch(lngN)) + 1, varText(lngIndex, 1), " ", vbTextCompare) 
          If lngPos > 0 And lngEnd > 0 Then 
            lngM = lngM + 1 
            varResult(lngIndex, lngM) = Mid(varText(lngIndex, 1), lngPos, lngEnd - lngPos) 
            lngPos = lngEnd + 1 
          End If 
        Loop While lngPos > 0 
      Next 
    Next 
    .Range("B2").Resize(Ubound(varResult, 1), Ubound(varResult, 2)) = varResult 
  End With 
 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: VBA: Textsuche und aufsplitten
26.10.2018 10:14:45
Bernd
Servus Sepp,
Danke für den Vorschlag. Dein Ansatz erscheint mir besser, da er jedes Zeichen in einer Zelle separat durchgeht.
Wie müsste ich den Code umbauen, wenn ich nicht starr nach "ISO" und "DIN" suchen möchte, sondern die Suchbegriffe in einer Spalte der Tabelle habe (siehe Beispiel im Anhang vom Ausgangspost: "DIN 3", "ISO 9", aber auch z.B. "VA 3", "AA 3", "Haumichblau 6").
Ich habe versucht deinen Code
varSearch = Array("DIN", "ISO") 

entsprechend zu ändern, das hat aber nicht funktioniert :(
varSearch = Array(Range("B2:B" & cells(Rows.Count,2).End(XLUp).Row) 
Danke und Grüße, Bernd
Anzeige
AW: VBA: Textsuche und aufsplitten
26.10.2018 10:21:10
Sepp
Hallo Bernd,
kein Problem.
https://www.herber.de/bbs/user/124924.xlsm
 ABCDEF
1Gruß Sepp
2
3

Anzeige
Danke Sepp
26.10.2018 13:08:52
Bernd
...mit kleinen Anpassungen hab ich`s dann schließlich hinbekommen.
Grüße, Bernd
Code noch etwas angepasst
26.10.2018 12:26:25
Sepp
Hallo Bernd,
so ist der Code noch etwas robuster.
Modul Modul1
Option Explicit 
 
Sub splitText() 
  Dim varSearch As Variant, varText As Variant, varResult() As Variant 
  Dim lngIndex As Long, lngN As Long, lngPos As Long, lngEnd As Long, lngM As Long 
  Dim rngRow As Range 
   
  With Sheets("Tabelle1") 
    varText = .Range("A2:B" & .Cells(.Rows.Count, 1).End(xlUp).Row) 
    Redim varResult(1 To Ubound(varText, 1), 1 To 20) 
    For lngIndex = 1 To Ubound(varText, 1) 
      varSearch = Split(varText(lngIndex, 2), ";") 
      lngPos = 0 
      lngM = 0 
      For lngN = Lbound(varSearch) To Ubound(varSearch) 
        Do 
          lngPos = InStr(lngPos + 1, varText(lngIndex, 1), Trim(varSearch(lngN)), vbTextCompare) 
          lngEnd = InStr(lngPos + Len(Trim(varSearch(lngN))) + IIf(InStr(1, Trim(varSearch(lngN)), " "), 0, 1), _
            varText(lngIndex, 1), " ", vbTextCompare) 
          If lngPos > 0 And lngEnd > 0 Then 
            lngM = lngM + 1 
            varResult(lngIndex, lngM) = Mid(varText(lngIndex, 1), lngPos, lngEnd - lngPos) 
            lngPos = lngEnd + 1 
          End If 
        Loop While lngPos > 0 
      Next 
    Next 
    With .Range("D2").Resize(Ubound(varResult, 1), Ubound(varResult, 2)) 
      .Value = varResult 
      For Each rngRow In .Rows 
        rngRow.Sort Key1:=rngRow.Cells(1, 1), Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortRows 
      Next 
    End With 
  End With 
 
End Sub 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige