Registriert seit: 10.04.2014
Version(en): 2016 + 365
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 | A | B | C | D | E | F | G | H | I | J | K | 4 | Bauteilnamen | Anzahl | Gehaeuse | Wert | Toleranz | Leistung | Nennspannung | Hersteller | Herstellerbezeichnung | Bemerkung | Art.Bez.1 | 5 | c100, c101, c102, c103, c104, c105, c106, c107, c108, c109, c110, c113, c114, c116, c118, c120, c201, c330 | 18 | smt0805 | 100n | 0,1 | | 50V | | | | 100nF 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 |
Rin_BoM_20160810.xlsb (Größe: 23,03 KB / Downloads: 7)
Registriert seit: 06.12.2015
Version(en): 2016
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:1 Nutzer sagt Danke an Fennek für diesen Beitrag 28
• Rabe
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Ralf, teste mal PHP-Code: Sub prcRalfSuche() Dim rngTreffer As Range Dim lngC As Long, lngA As Long Dim vntArray As Variant With Worksheets("Tabelle1") For lngC = 5 To .Cells(.Rows.Count, 11).End(xlUp).Row vntArray = Split(.Cells(lngC, 11), " ") For lngA = 0 To UBound(vntArray) Set rngTreffer = .Cells(lngC, 1).Resize(, 10).Find(vntArray(lngA), LookIn:=xlValues, lookat:=xlPart) If Not rngTreffer Is Nothing Then Cells(lngC, 11).Characters(InStr(.Cells(lngC, 11), vntArray(lngA)), Len(vntArray(lngA))).Font.Color = vbRed End If Next lngA Next lngC End With End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 10.04.2014
Version(en): 2016 + 365
23.08.2016, 09:07
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2016, 09:08 von Rabe.)
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):
Rin_BoM_20160810.xlsb (Größe: 24,42 KB / Downloads: 8)
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 21.07.2016
Version(en): 2007
23.08.2016, 09:41
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2016, 09:41 von IchBinIch.
Bearbeitungsgrund: Ergänzung
)
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:1 Nutzer sagt Danke an IchBinIch für diesen Beitrag 28
• Rabe
Registriert seit: 10.04.2014
Version(en): 2016 + 365
23.08.2016, 12:22
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2016, 13:24 von Rabe.)
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?
Registriert seit: 11.04.2014
Version(en): Office 2007
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:2 Nutzer sagen Danke an Steffl für diesen Beitrag 28
• Rabe, IchBinIch
Registriert seit: 10.04.2014
Version(en): 2016 + 365
23.08.2016, 13:23
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2016, 13:23 von Rabe.)
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.
|