Stückliste vergleichen: Teilinhalte von Zellen in div. Spalten suchen und einfärben
#1
Hallo,

ich habe eine Stückliste mit vielen Zeilen und Spalten.
In einer Spalte steht ein Text als manuelle Zusammensetzung aus manchen Spalten, getrennt mit Leerzeichen. Alle relevanten Spalten sind im Ausschnitt zu sehen.

Wie kann ich alle Teilinhalte einer Zelle dieser Spalte rot markieren, die nicht genau so in einer der anderen Spalten derselben Zeile vorkommen?
Ich will also z.B. in K5 das "100nF" und das "X7R" und das "0805" rot eingefärbt haben, weil diese Teile nicht in einer der Spalten A-J in Zeile 5 vorkommen. dann weitermachen mit der nächsten Zeile.
Per VBA? Vermutlich trennen des Zellinhaltes von K5 an Leerzeichen und suchen der Einzeltexte mit xlWhole in Spalten A-J.

Tabelle1
ABCDEFGHIJK
4BauteilnamenAnzahlGehaeuseWertToleranzLeistungNennspannungHerstellerHerstellerbezeichnungBemerkungArt.Bez.1
5c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c113, c114, c116, c118, c120, c201, c33018smt0805100n0,150V100nF 50V 10% 0805 X7R #
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 19.08 einschl. 64 Bit



.xlsb   Rin_BoM_20160810.xlsb (Größe: 23,03 KB / Downloads: 7)
Top
#2
Hallo Rabe,

um den Text in Teilen einer Zelle zu formatieren, wird "cells.characters" benötigt. Damit kann man Farben oder Schriftarten setzen, einzelne Bauchstaben löschen oder einfügen.

mfg
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Rabe
Top
#3
Hallo Ralf,

teste mal

PHP-Code:
Sub prcRalfSuche()
   
Dim rngTreffer As Range
   Dim lngC 
As LonglngA As Long
   Dim vntArray 
As Variant
   With Worksheets
("Tabelle1")
      For 
lngC 5 To .Cells(.Rows.Count11).End(xlUp).Row
         vntArray 
Split(.Cells(lngC11), " ")
         For 
lngA 0 To UBound(vntArray)
            
Set rngTreffer = .Cells(lngC1).Resize(, 10).Find(vntArray(lngA), LookIn:=xlValueslookat:=xlPart)
            If 
Not rngTreffer Is Nothing Then
               Cells
(lngC11).Characters(InStr(.Cells(lngC11), vntArray(lngA)), Len(vntArray(lngA))).Font.Color vbRed
            End 
If
         
Next lngA
      Next lngC
   End With
End Sub 
Gruß Stefan
Win 10 / Office 2016
Top
#4
Hi Stefan,

(22.08.2016, 20:30)Steffl schrieb: teste mal

Danke, aber leider noch nicht ganz, hier ein Vergleich von Ist [Spalte K) und Soll (Spalte L):

.xlsb   Rin_BoM_20160810.xlsb (Größe: 24,42 KB / Downloads: 8)
Top
#5
Hallo Ralf,

tut mir leid, da fällt mir nichts ein, wie ich das gewünschte lösen könnte.
Gruß Stefan
Win 10 / Office 2016
Top
#6
Hallo Ralf,

Du musst nur die positive Suche umkehren:


Code:
If rngTreffer Is Nothing Then

anstelle von
Code:
If Not rngTreffer Is Nothing Then



Gruß
Ich

Ergänzung:
Allerdings verstehe ich noch nicht warum Stefans Makro in dem Fall beispielsweise für Zeile 13 "LED" schwarz lässt.
[-] Folgende(r) 1 Nutzer sagt Danke an IchBinIch für diesen Beitrag:
  • Rabe
Top
#7
Hallo,

(23.08.2016, 09:41)IchBinIch schrieb: Du musst nur die positive Suche umkehren:
[...]
Ergänzung:
Allerdings verstehe ich noch nicht warum Stefans Makro in dem Fall beispielsweise für Zeile 13 "LED" schwarz lässt.

ok, so sieht es besser aus, aber auch in Zeile 12 und noch einigen anderen stimmt es noch nicht ganz.

Vielleicht wegen doppelten Leerzeichen? Sollten die dann vorher ersetzt werden?
Oder es sind noch solche anderen Leerzeichen drin: chr(160) oder so?
Top
#8
Hallo Ralf,

(23.08.2016, 12:22)Rabe schrieb: ok, so sieht es besser aus, aber auch in Zeile 12 und noch einigen anderen stimmt es noch nicht ganz.

Vielleicht wegen doppelten Leerzeichen? Sollten die dann vorher ersetzt werden?
Oder es sind noch solche anderen Leerzeichen drin: chr(160) oder so.

Mache bei der Find-Methode ein Trim um das vntArray
Code:
Set rngTreffer = .Cells(lngC, 1).Resize(, 10).Find(Trim(vntArray(lngA)), LookIn:=xlValues, lookat:=xlPart)
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 2 Nutzer sagen Danke an Steffl für diesen Beitrag:
  • Rabe, IchBinIch
Top
#9
Hi Stefan,

(23.08.2016, 12:45)Steffl schrieb: Mache bei der Find-Methode ein Trim um das vntArray
Code:
Set rngTreffer = .Cells(lngC, 1).Resize(, 10).Find(Trim(vntArray(lngA)), LookIn:=xlValues, lookat:=xlPart)

wir kommen näher!

Mit xlWhole statt xlPart stimmt fast alles! Sehr gut!
Ich habe auch schon ein paar Fehler in meiner manuellen Einfärbung gefunden. Mit den restlichen falschen Makro-Rotfärbungen können wir vermutlich leben.
Top


Gehe zu:


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