Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1828to1832
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

Zellenvergleich mit Zeilenumbruch

Zellenvergleich mit Zeilenumbruch
17.05.2021 13:33:04
Daniel
Moinsen,
ich hoffe auf eure Hilfe bei einem Problem vor das mich mein Chef gestellt hat.
Ich soll eine Rechnung mit einer Bad-Word-Liste vergleichen. Die Rechnung wird per Makro in Excel erstellt und die Relevanten Daten stehen auf Tabelle1 in Spalte D ab Zeile 24 und die Bad-Word-Liste auf Tabelle Bad Words (siehe Beispiel Datei). Das Problem dabei ist, dass die Zellen Zeilenumbrüche enthalten und somit die meisten Funktionen nicht greifen.
Ich würde das ganz gerne als Makro einrichten, damit es von allen in unserer Firma, mit Hilfe der Rechnungsvorlage, Problemlos angewendet werden kann.
Ich hatte mir hier im Forum bereits zum Testen ein Makro herausgesucht, nur leider funktioniert es auch nicht bei Zellen mit Zeilenumbrüchen und nur bei Daten die in Spalte A stehen:

Sub Vergleich()
Dim wks As Worksheet
Dim var As Variant
Dim iRow As Integer
Set wks = Worksheets("Bad Words")
For iRow = 1 To WorksheetFunction.CountA(Columns(1))
var = Application.Match(Cells(iRow, 1).Value, wks.Columns(1), 0)
If Not IsError(var) Then
Cells(iRow, 1).Interior.ColorIndex = 3
wks.Cells(var, 1).Interior.ColorIndex = 3
End If
Next iRow
End Sub
Test Datei:
https://www.herber.de/bbs/user/146233.xlsx
Ich würde mich riesig über eure Hilfe freuen.
Gruß
Daniel
P.S. Kann mir jemand einen guten Grundkurs für Makro/VBA Programmierung oder auch ein gutes Buch für Einsteiger empfehlen?

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mal als Idee / Denkanstoss
17.05.2021 14:26:28
Pierre
Hallo Daniel,
ich habe mal das Ganze (Suchen und Ersetzen, Zeilenumbruch (Alt+010) durch Leerzeichen) vom Makrorecorder aufzeichnen lassen.
Dabei ist folgendes entstanden, vielleicht hilft dir das ja.

Sub Makro1()
' Makro1 Makro
Cells.Replace What:="" & Chr(10) & "", Replacement:=" ", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Wenn du zuerst per Makro alle Zeilenumbrüche entfernst, und erst danach deinen eigentlichen Code ausführst, kommst du vielleicht zum Ziel.
Gruß Pierre
Anzeige
AW: Mal als Idee / Denkanstoss
18.05.2021 13:40:13
Daniel
Hallo Pierre,
vom Prinzip her eine Gute Idee, aber die Rechnungen müssen leider dieser Form entsprechen. Ich müsste erstmal austesten, wie sich das entfernen der Zeilenumbrüche auswirkt.
Vielen Dank für die Idee und die schnelle Antwort, ich werde es im Hinterkopf behalten für die weitere Entwicklung unserer Rechnungserstellung.
Gruß
Daniel
AW: Zellenvergleich mit Zeilenumbruch
17.05.2021 14:30:41
ChrisL
Hi
Ich habe eine etwas kompliziertere Variante mit RegEx gewählt. Weil RING z.B. auch in SPRING vorkommt. Also suchst du nach ganzen Begriffen d.h.
"(^| )" = am Zeilenanfang oder gefolgt auf einen Leerschlag
"($| )" = am Zeilenende oder gefolgt auf einen Leerschlag
Die Bad Words solltest du unbedingt ausmisten:
- Wenn z.B. bereits "Pipe" ein Bad Word darstellt, dann musst du nicht mehr nach "Pipe bend" suchen.
- "Adjuster bolt" wird 4x aufgeführt
- Case-Sensitive oder nicht, kannst du über folgende Codezeile definieren: .IgnoreCase = True (aktuell ist Gross-/Kleinschreibung egal, somit musst du dies in der Bad Words Liste nicht berücksichtigen)

Sub MeinTest()
Dim rng1 As Range, rng2 As Range
Dim r1 As Range, r2 As Range
With ActiveSheet
Set rng1 = .Range("D24:D" & .Cells(Rows.Count, 4).End(xlUp).Row)
End With
With Worksheets("Bad Words")
Set rng2 = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
For Each r1 In rng1.Cells
r1.Interior.Color = xlNone
For Each r2 In rng2.Cells
If myRegEx(r1.Text, "(^| )" & r2.Text & "($| )") Then
r1.Interior.Color = vbRed
Debug.Print r2
Exit For
End If
Next r2
Next r1
End Sub
Public Function myRegEx(TextInput As String, regexPattern As String) As Boolean
Dim regEx As Object: Set regEx = CreateObject("VBscript.regexp")
Dim matches
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = regexPattern
End With
If regEx.test(TextInput) Then
Set matches = regEx.Execute(TextInput)
If Not matches Is Nothing Then myRegEx = True
End If
End Function
cu
Chris
Anzeige
AW: Zellenvergleich mit Zeilenumbruch
18.05.2021 13:43:45
Daniel
Chris,
vielen Dank für Deinen Beitrag. Ich habe es gerade in ausgetestet und es funktioniert super.
Du hast natürlich recht, dass die Liste noch aufgeräumt werden muss. Das ist auch in Arbeit, es war jetzt nur eine schnelle Zusammenstellung.
Vielen herzlichen Dank für diese Lösung.
Gruß
Daniel

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige