Clever-Excel-Forum

Normale Version: Zeichenkette in spalte prüfen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich bin neu hier und hoffe meine Hilfsanfrage ist so richtig, falls nicht bitte korrigieren. 

Folgendes Problem:
Ich habe eine Tabelle mit 4 Spalten und ca. 30.000 Zeilen.


Test-Mappe ist eingefügt.

Überprüft werden soll Spalte B (Inhalt) auf folgende Inhalte: KLZ, RV, ASS, Limit, BTM, Schleuse und Sepa.
Falls einer dieser "Zeichenfolge" in Spalte B steht, soll diese "Zeichenfolge" in Spalte D (Dokumententyp) hineingeschrieben werden, falls keiner der "Zeichenfolgen" in der Spalte B stehen soll "undefiniert" ausgegeben werden.

Ist es möglich dafür eine Formel zu kreieren? 
Wäre eine Super Sache die mir sehr viel zeit erspart!

Vielen Dank schon mal vorab!  :05:

LG
Max
Hallo,

bei 30000 Zeilen würde ich das mit einem Makro lösen. Statt eines Bildchens wäre die Datei hilfreich gewesen, dann könnte man das testen.
Hallo Klaus-Dieter,

vielen Dank für die schnelle Antwort!

Ich kann  leider nicht die komplette Datei anhängen, Firmengeheimnisse, Datenschutz etc.... Deshalb ist mir das untersagt.

Ich habe alternativ das Bild nun als Tabelle beigefügt. Ich hoffe das reicht zum testen.

LG
Max
Hallo,

Zitat:Ich kann  leider nicht die komplette Datei anhängen, Firmengeheimnisse, Datenschutz etc.... Deshalb ist mir das untersagt.

... eine Beipieldatei enthält keine Firmengeheimnisse, weil sie ganz einfach anonymisiert ist.
(26.02.2019, 09:55)Käpt\n Blaubär schrieb: [ -> ]Hallo,


... eine Beipieldatei enthält keine Firmengeheimnisse, weil sie ganz einfach anonymisiert ist.

Ist bereits angehängt.

LG
Max
Hallo,

habe schon mal ein Makro vorbereitet, mangels Daten musst du das dann selber testen. 

Code:
Option Explicit
Sub auswert()
    Dim intAnz As Integer
    Dim varDatArr As Variant
    Dim c As Range
    Dim ersteAdresse As String
    varDatArr = Array("KLZ", "RV", "ASS", "Limit", "BTM", "Schleuse", "Sepa")
    For intAnz = LBound(varDatArr) To UBound(varDatArr)
        With Worksheets(1).Range("B2:B" & ActiveCell.SpecialCells(xlLastCell).Row)
            Set c = .Find(varDatArr(intAnz), LookIn:=xlValues, LookAt:=xlPart)
            If Not c Is Nothing Then
                ersteAdresse = c.Address
                Do
                    Cells(c.Row, 4) = "undefiniert"
                    Cells(c.Row, 4) = varDatArr(intAnz)
                    Set c = .FindNext(c)
                Loop While Not c Is Nothing And c.Address <> ersteAdresse
            End If
        End With
    Next intAnz
End Sub
Hallo Klaus-Dieter,

vielen Dank für deine Lösung!  Blush 

Die Lösung ist soweit richtig, das einzige was noch nicht funktioniert ist "undefiniert" wenn eines dieser "Zeichenfolge" NICHT in Spalte B steht.

LG
Max
Hallo,

du hast recht, wenn ich hätte testen können, wäre mir aufgefallen, dass ich da auf dem Holzweg war. Die Find-Methode, mit der ich da gearbeitet habe, kann nur bei Treffern aktiv werden. Da müsste man im Nachgang die Spalte überarbeiten, suchen nach leeren Zellen, ersetzen durch deinen Text. Die Alternative wäre sonst eine Schleife gewesen, was deutlich länger gedauert hätte.
Das Ergebnis "undefiniert" ist völlig redundant. Verzichte darauf.

Code:
Sub M_snb()
   sp = Split("KLZ RV ASS Limit BTM Schleuse Sepa")
   sn = Sheet1.Cells(1).CurrentRegion
  
   For j = 1 To UBound(sn)
      For jj = 0 To UBound(sp)
          If InStr(sn(j, 2), sp(jj)) Then Exit For
      Next
      If jj <= UBound(sp) Then sn(j, 4) = sp(jj)
   Next
  
   Sheet1.Cells(1).CurrentRegion = sn
End Sub