Ich habe eine Excel Tabelle mit Artikelnummern von Kleidern, daneben sind Kolonnen S, M, L, XL, wo markiert ist welche Grössen verfügbar sind.
Nun hat der Ersteller netterweise das so gelöst, dass er die entsprechenden Zellen in der Zellformatierung „Ränder“ mit den gekreuzten Diagonalen formatiert hat, wenn die entsprechende Grösse nicht verfügbar ist. Hinzu kommt, dass diese Formatierung dann je nach Lage der Zelle oben, unter, rechts oder links oder in Kombination dicke oder dünne Aussenränder haben kann.
Für die Weiterverarbeitung sollte ich diese Formatierung durch einen Zellinhalt, zB. X oder 0 / 1 ersetzen.
Kennt jemand einen Trick, wie man diese Formatierung gezielt suchen kann. Egal welche Kombination der Ränder ich eingebe Excel findet nichts!
VBA cellformat.borders mit benutzerdefinierter Funktion auswerten. Den Reinhard haben sie leider vergrault, der würde sich dir Mühe machen, dir das näher auseinanderzusetzen.
Nein, die Firma , welche diese Artikel und Preislisten erstellt sind absolute Excel Anarchisten
Die haben eine Liste und wenn was aus ist, formatieren sie diese Zelle von Hand mit den Diagonalen und senden die Liste neu aus. Und ich kann dann suchen, was geändert hat.
Das möchte ich von einer Mastertabelle aus mit Verweisfunktionen automatisieren, aber eine Verweisfunktion (Offset-Match-Kombination, weil auch nix sortiert ist) kann keine Formatierung erkennen.
Ich hoffe, ich habe mich einigermassen verständlich ausgedrückt.
Schleife über alle Zellen (Bereich musst Du anpassen)
Abfrage, ob ein Rahmen vorhanden
wenn ja, Rahmen entfernen und Wert 0 eintragen
Gruß Ralf
Sub Über_alle_Zellen()
Dim r As Long
Dim c As Long
Dim z As Variant
For Each z In Worksheets("Tabelle1").range("A1:C20")
If z.Borders(xlEdgeLeft).LineStyle <> xlNone Then
z.Select
r = z.Row
c = z.Column
Call Rahmen_weg(r, c)
z.Value = 0
End If
Next z
End Sub
Sub Rahmen_weg(r, c)
With Cells(r, c)
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
End With
End Sub
setzt voraus, dass immer eine linke Kante als Rahmen vorhanden ist. Sollten zwei Zellen direkt nebeneinander liegen, könnte es Ärger geben, nachdem die linke geputzt ist. Abhilfe:
If z.Borders(xlEdgeLeft).LineStyle <> xlNone _
Or z.Borders(xlEdgeRight).LineStyle <> xlNone Then
@drambeldier/Ralf: das skript macht was, aber eben nicht das was es sollte, Rahmen werden entfernt, aber nicht diejenigen wo die „gekreuzten“ Borders drin sind und auch der Wert wird nicht eingetragen.
Es ist eben genau das Problem, dass diese Diagonalen in allen möglichen Kombinationen von Kanten vorkommen, auch noch mit Strichdicken Varianten.
Ich habe die KISS Lösung gewählt und Sohnemann angestellt, dort wo ein Kreuz ist, mach ein Kreuz rein. Excel für die 2. Klasse
Dim r As Long
Dim c As Long
Dim z As Variant
For Each z In Worksheets("Blatt 2").Range("g6:j90")
If z.Borders(xlEdgeLeft).LineStyle <> xlNone _
Or z.Borders(xlEdgeRight).LineStyle <> xlNone Then
z.Select
r = z.Row
c = z.Column
Call Rahmen_weg(r, c)
z.Value = "X"
End If
Next z
End Sub
Sub Rahmen_weg(r, c)
With Cells(r, c)
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
End With
End Sub
Das funzt einwenig, alle Rahmen verschwinden, und die X schreibt er in alle Zellen des Bereichs.