5.4k Aufrufe
Gefragt in Tabellenkalkulation von florian1010 Mitglied (754 Punkte)
Hallo zusammen,

in einer Spalte habe ich Zellen mit genauen Maßangaben (L X B X H). Nun möchte ich, dass wenn die B(reite) größer als 3,01 Meter ist, die Zelle farbig markiert wird.

Habe es mit rechts und links versucht, sobald aber in einer Zelle mehrere Zeilen mit Maßangaben gibt, hätte meine Formel schon verloren.

Die Zellen in Excel 2007 sehen beispielsweise so aus:

in Zelle J2

3,00 x 2,20 x 2,85

in Zelle J3 - Zelle sollte markiert werden

2,20 x 0,80 x 1,25
3,50 x 1,60 x 2,20
4,50 x 3,10 x 2,20

in Zelle J4 - Zelle sollte markiert werden

4,50 x 3,25 x 4,00

Es ist leider momentan noch nicht möglich, die Maße auf 3 Spalten aufzuteilen.

Kann mir hier jemand bei helfen.

Vielen Dank schon mal im Voraus

Gruß
Florian

23 Antworten

0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hallo M.O.

das Ding ist echt klasse.

Vielen Dank für die erfolgreiche "bastelei" mit den Textboxen "HÖHE". Ich hab das noch geschoben und geschoben und geschoben - dafür hätte ich wieder mindestens einen ganzen Mittag gebraucht.

Kannst du mir nur noch das Marko erklären - bin immer noch fest am lernen ;-)

Gruß
Florian
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Florian,

hier noch mal das Makro mit Kommentaren:

Sub ueberbreite()

Dim anfang, ende, zeichen, zeile As Long

'Schleife von Zeile 2 bis zu letzten beschriebenen Zeile
For zeile = 2 To ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

'Falls die Länge des Inhalts der Zelle J in der geprüften Zeile größer 1 und die Zelle nicht als % formatiert ist..
If Len(Cells(zeile, 10).Value) > 1 And Cells(zeile, 10).NumberFormat <> "0.00%" Then

'wird der Inhalt der Zelle Zeichen für Zeichen geprüft
For zeichen = 1 To Len(Cells(zeile, 10).Value)

'Falls das geprüfte Zeichen ein x ist
If Mid(Cells(zeile, 10).Value, zeichen, 1) = "x" Then
'..dann wird die Position in die Variable ende geschrieben, falls die Variable anfang größer 0 ist
If anfang > 0 Then ende = zeichen - 1
'.. ansonsten wird die Position in die Variable anfang geschrieben
If anfang = 0 Then anfang = zeichen + 1
End If

'hier wird geprüft, ob das geprüfte Zeichen ein Zeilenumbruch = Chr(13) ist oder ob alle Zeichen geprüft wurden..
If Mid(Cells(zeile, 10).Value, zeichen, 1) = Chr(13) Or zeichen = Len(Cells(zeile, 10).Value) Then

'.. dann wird die Variable Ende gesetzt, falls diese noch Null ist (wenn z.B. nur ein x in der Zeichenfolge vorhanden ist)
If ende = 0 Then ende = zeichen - 1

'Fehlerbehandlung: Sollte der nächste Befehl einen Fehler produzieren, dann einfach weitermachen
On Error Resume Next

'hier wird geprüft, ob die Breiten, deren Position im Text mittels der Variablen anfang und ende definiert wird, größer als 3,01 ist
If CDbl(Trim(Mid(Cells(zeile, 10).Value, anfang, ende - anfang))) > 3.01 Then
'sollte das der Fall sein, dann wird die Hintergrundfarbe der Zelle geändert
Cells(zeile, 10).Interior.ColorIndex = 3
'und die Schleife zeichen verlassen
Exit For
End If
'Variablen werden für den nächsten Durchgang wieder auf Null gesetzt
anfang = 0
ende = 0
End If

Next zeichen

'Variablen werden für den nächsten Durchgang wieder auf Null gesetzt, wenn Breite nicht größer als 3,01 war
anfang = 0
ende = 0

End If

Next zeile

Exit Sub


Freut mich, dass es jetzt so klappt, so wie du es dir vorstellst.

Gruß

M.O.
0 Punkte
Beantwortet von florian1010 Mitglied (754 Punkte)
Hi,

Danke für die Erklärung. Wieder ein wenig dazu gelernt.

Gruß
Florian
...