Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Interior.ColorIndex contra RGB(x,y,z)

Forumthread: Interior.ColorIndex contra RGB(x,y,z)

Interior.ColorIndex contra RGB(x,y,z)
26.01.2005 20:29:16
r.sch.
Hallo Leute,
Excel kennt bekanntlich 56 Farben. Wie bekomme ich den RGB Wert zu einen Index Wert?
Mit folgenden 2 Routinen kann ich zwar die Farben in einer Tabelle darstellen:

Sub farben()
For B = 1 To 56
If B < 29 Then
Cells(B, 1).Interior.ColorIndex = B
Cells(B, 1) = B
Cells(B, 1).Font.Size = 8
Else
Cells(B - 28, 2).Interior.ColorIndex = B
Cells(B - 28, 2) = B
Cells(B - 28, 2).Font.Size = 8
End If
Next B
End Sub


Sub rgb_test()
Dim B, G, R
Dim BEnd, GEnd, REnd, Schritt
BEnd = 255: REnd = 255: GEnd = 255: Schritt = 51
For R = 0 To REnd Step Schritt
For G = 0 To GEnd Step Schritt
For B = 0 To BEnd Step Schritt
Tabelle1.Cells(1 + B / Schritt + R / Schritt * (REnd / Schritt + 1), 4 + G / Schritt).Interior.Color = rgb(R, G, B)
Tabelle1.Cells(1 + B / Schritt + R / Schritt * (REnd / Schritt + 1), 4 + G / Schritt) = Format(R, "000") & " " & Format(G, "000") & " " & Format(B, "000")
Next B
Next G
Next R
End Sub

aber da ich eigentlich den BackColor Wert einer UserForm TextBox ändern will, indem ich den Index dort eintrage (um ihn an anderer Stelle auszuwerten), brauche ich an der Stelle die zugehörigen RGB Werte.
Danke schon mal im Voraus und
Gruß aus 'm Vorharz
Reinhard
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Interior.ColorIndex contra RGB(x,y,z)
26.01.2005 20:41:22
Reinhard
Hi Namensvetter,
nachfolgenden Code kannst ja mal laufen lassen, ich hatte ihn mal für ein anderes Forum entwickelt. Die Hauptumrechnung in R G B geschieht durch Wert Mod 256 und anschliessendem /256 usw.
Gruß aus Meinhattan
Reinhard
***************************************************************************************
Hi johneff,
Rechtsklick unten auf den Tabellenblattnamen, Code anzeigen auswählen, der Editor geht auf, nachstehenden Code reinkopieren, Editor schliessen.
Dann mit Extras-->Makro-->Makros das Makro "Tabelle1!RGBAnzeige ausführen lassen. Dies musst du nur einmal machen.
In A:C hast du dann die 3 Werte für RGB, in D die Farbnummer(1-56) und in E siehst du wie die Farbe aussieht.
Die Werte die du anfangs siehst sind die Werte der Standardfarbeinstellung.
Jetzt kannst du nach Lust und Laune die Werte ändern, Änderungen siehst du sofort in Spalte E.
Gruß
Reinhard

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A2:C57")) Is Nothing Then Exit Sub
If Target.Cells.Count <> 1 Then Exit Sub
z = Target.Row
ThisWorkbook.Colors(z - 1) = RGB(Cells(z, 1), Cells(z, 2), Cells(z, 3))
Target.Select
End Sub
Sub RGBAnzeige()
Dim z As Byte
Application.EnableEvents = False
With Worksheets("Tabelle1")
.Range("A1:E1") = Split("Rot Grün Blau Farbnummer Farbe")
For z = 1 To 56
.Cells(z + 1, 4).Value = z
.Cells(z + 1, 5).Interior.ColorIndex = z
Wert = Worksheets("Tabelle1").Cells(z + 1, 5).Interior.Color
On Error Resume Next
.Cells(z + 1, 1) = Wert Mod 256
Wert = (Wert - Cells(z + 1, 1)) / 256
.Cells(z + 1, 2) = Wert Mod 256
Wert = (Wert - Cells(z + 1, 2)) / 256
.Cells(z + 1, 3) = Wert Mod 256
Next z
End With
Application.EnableEvents = True
End Sub

Anzeige
werd' ich testen, danke erstmal :-)) o.T.
26.01.2005 20:45:04
r.sch.
o.T.
AW: Interior.ColorIndex contra RGB(x,y,z)
26.01.2005 20:56:24
r.sch.
Hi,
irgendwas flutscht da nicht:
für die Farbnummern 1 (scharz, 0,0,0) gibt dein makro 0,51,102 aus, dto für Nr 2 (weiß 256,256,256) und ab Nr 36 zeigt es 3x 256 für alle folgenden Farben?
War in F gerade Nebel? Spaß beiseite,
Gruß aus 'm Vorharz
Reinhard
AW: Interior.ColorIndex contra RGB(x,y,z)
26.01.2005 21:02:43
Reinhard
Hi Reinhard,
256 ??
ich habe die nachfolgenden Werte, hat Microsoft unterschiedliche Faben für Städter und Bergbauern? :-))))
Gruß
Reinhard

Rot	Grün	Blau	Farbnummer
0	0	0	1
255	255	255	2
255	0	0	3
0	255	0	4
0	0	255	5
255	255	0	6
255	0	255	7
0	255	255	8
128	0	0	9
0	128	0	10
0	0	128	11
128	128	0	12
128	0	128	13
0	128	128	14
192	192	192	15
128	128	128	16
153	153	255	17
153	51	102	18
255	255	204	19
204	255	255	20
102	0	102	21
255	128	128	22
0	102	204	23
204	204	255	24
0	0	128	25
255	0	255	26
255	255	0	27
0	255	255	28
128	0	128	29
128	0	0	30
0	128	128	31
0	0	255	32
0	204	255	33
204	255	255	34
204	255	204	35
255	255	153	36
153	204	255	37
255	153	204	38
204	153	255	39
255	204	153	40
51	102	255	41
51	204	204	42
153	204	0	43
255	204	0	44
255	153	0	45
255	102	0	46
102	102	153	47
150	150	150	48
0	51	102	49
51	153	102	50
0	51	0	51
51	51	0	52
153	51	0	53
153	51	102	54
51	51	153	55
51	51	51	56

Anzeige
AW: Interior.ColorIndex contra RGB(x,y,z)
27.01.2005 08:58:35
r.sch.
Hej Reinhard,
bei mir sieht das Ergebnis in der Tat so aus (werd' aber die Routie nochmal prüfen)
Gruß aus 'm Vorharz
Reinhard
Rot Grün Blau Farbnummer
0 51 102 1
0 51 102 2
0 51 102 3
0 102 204 4
0 0 255 5
51 51 0 6
51 51 51 7
0 51 102 8
51 51 153 9
51 51 153 10
51 102 255 11
51 51 0 12
51 51 51 13
153 51 102 14
102 102 153 15
102 102 153 16
51 102 255 17
153 51 0 18
153 51 102 19
153 51 102 20
153 51 102 21
153 51 102 22
153 153 255 23
153 51 0 24
153 51 102 25
153 51 102 26
153 51 102 27
255 0 255 28
255 0 255 29
255 0 0 30
255 0 0 31
153 51 102 32
255 128 128 33
255 0 255 34
255 0 255 35
255 255 255 36
255 255 255 37
255 255 255 38
255 255 255 39
255 255 255 40
255 255 255 41
255 255 255 42
255 255 255 43
255 255 255 44
255 255 255 45
255 255 255 46
255 255 255 47
255 255 255 48
255 255 255 49
255 255 255 50
255 255 255 51
255 255 255 52
255 255 255 53
255 255 255 54
255 255 255 55
255 255 255 56

PS.: nix gegen das Ländliche, obwohl ich leider die Bergstraße (Alsbach) mit hier hab' tauschen müssen
Anzeige
sorry, Flüchtigkeitsfehler meinerseits
27.01.2005 10:16:05
r.sch.
Moin Reinhard,
me aculpa, habe Tabelle1 durch Tabelle2 ersetzt, aber nur im 1. Vorkommen (und auf Tabelle1 waren noch andere Farbexperimente! Tschulligung!!
Habe jetzt den Zusammenhang mit QBColor:

Sub test()
Dim intFarbWert%, r%, g%, b%, intFW
intFarbWert = InputBox("Farbnummer: (leider nur bis 15)")
intFW = QBColor(intFarbWert)
r = intFW Mod 256
intFW = (intFW - r) / 256
g = intFW Mod 256
intFW = (intFW - g) / 256
b = intFW Mod 256
MsgBox r & "  " & g & "  " & b
End Sub

Leider leider funzt das nur bis Farbnummer 15 und stimmt nicht mit den Nummern aus xl2k überein!
Hat da vielleicht noch jemand eine Idee?
Gruß aus 'm Vorharz
Reinhard
Anzeige
AW: sorry, Flüchtigkeitsfehler meinerseits
27.01.2005 10:48:24
Reinhard
Hi Reinhard,
lass doch das QBColor weg, stammt aus uralten Dos-Zeiten wo es nur 8 Farben gab (Nummer 0-7), die anderen Farben (8-15) sind nur die ersten acht in intensiv, also leuchtender.
Nimm doch Code von meinem oder Rainers Beispielcode.
Gruß
Reinhard aus dem sonnigen Franfurt/Mein
Anzeige
AW: sorry, bin ich mit Blindheit geschlagen?
27.01.2005 15:02:35
r.sch.
Hi Reinhard,
ich suche nunmehr nichts anderes als den Ersatz der Funktion QBColor(wert), die dann für xl 2k gilt und Werte 1..56 abdeckt.
Gruß aus 'm Vorharz
Reinhard
PS hab m. d. g. T.g mit XY ungelöst verlustiert o
27.01.2005 15:04:59
r.sch.
o.T.
AW: Interior.ColorIndex contra RGB(x,y,z)
26.01.2005 21:01:54
Ramses
Hallo
probier mal das

Sub RGBAnzeige()
'auf Grundlage von einem Code von Nepumuk
Dim Rot As Long, Grün As Long, Blau As Long, Wert As Long
' ****** Ergaänzung Hajo
Dim i As Integer
For i = 1 To 56
Cells(i, 1).Interior.ColorIndex = i
Wert = Cells(i, 1).Interior.Color
'       Wert = ActiveCell.Interior.Color
On Error Resume Next
Rot = Wert Mod 256
Wert = (Wert - Rot) / 256
Grün = Wert Mod 256
Wert = (Wert - Grün) / 256
Blau = Wert Mod 256
'MsgBox Rot & ", " & Grün & ", " & Blau
' ***** Ergänzung Hajo
Cells(i, 2) = i
Cells(i, 3) = Rot
Cells(i, 4) = Grün
Cells(i, 5) = Blau
Next i
Cells(57, 2) = "Index"
Cells(57, 3) = "Rot"
Cells(57, 4) = "Grün"
Cells(57, 5) = "Blau"
Cells(58, 3) = "RGB Farbwerte"
End Sub

Gruss Rainer
Anzeige
AW: Interior.ColorIndex contra RGB(x,y,z)
27.01.2005 08:50:58
r.sch.
Hallo Rainer,
sieht schon viel besser aus! :-)) Vielen Dank!
Ich habe jetzt in der VBHilfe die Funktion QBColor gefunden, die mir den Zusammenhang zwischen Indexnummer Farbwert liefert, den ich dann mit Hilfe der Routine umsetzen kann.
Gruß aus 'm Vorharz
Reinhard
Function QBColor für 56 Farben
27.01.2005 15:22:56
Reinhard
Hi Reinhard,

Function QBColor56(Farbzahl As Integer)
'auf Grundlage von einem Code von Nepumuk und Rainer und mir :-)
Dim Rot As Long, Grün As Long, Blau As Long, Wert As Long
Range("A1").Interior.ColorIndex = Farbzahl
Wert = Range("A1").Interior.Color
On Error Resume Next
Rot = Wert Mod 256
Wert = (Wert - Rot) / 256
Grün = Wert Mod 256
Wert = (Wert - Grün) / 256
Blau = Wert Mod 256
QBColor56 = RGB(Rot, Grün, Blau)
End Function


Sub test()
MsgBox "Farbzahl 35 hat dem RGB-Farbwert: " & QBColor56(35)
End Sub

Gruß
Reinard
Anzeige
besten Dank.. wie gesagt, vor lauter Formeln..
27.01.2005 15:41:08
r.sch.
Hej Reinhard,
ich bin halt doch noch ziemlich schlecht, wenn ich nicht selbst auf eine Funktion komme!
Danke dir und
Gruß
aus 'm Vorharz
Reinhard
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Interior.ColorIndex vs. RGB(x,y,z) in Excel VBA


Schritt-für-Schritt-Anleitung

Um den ColorIndex einer Zelle in Excel VBA zu verwenden und ihn in den RGB-Wert zu konvertieren, kannst du folgende Schritte ausführen:

  1. Farbtabelle erstellen: Verwende das folgende Makro, um die Farbtabelle (ColorIndex) darzustellen:

    Sub farben()
       For B = 1 To 56
           If B < 29 Then
               Cells(B, 1).Interior.ColorIndex = B
               Cells(B, 1) = B
           Else
               Cells(B - 28, 2).Interior.ColorIndex = B
               Cells(B - 28, 2) = B
           End If
       Next B
    End Sub
  2. RGB-Werte abrufen: Verwende das folgende Makro, um die RGB-Werte basierend auf dem ColorIndex zu erhalten:

    Sub RGBAnzeige()
       Dim z As Byte
       Application.EnableEvents = False
       With Worksheets("Tabelle1")
           .Range("A1:E1") = Split("Rot Grün Blau Farbnummer Farbe")
           For z = 1 To 56
               .Cells(z + 1, 4).Value = z
               .Cells(z + 1, 5).Interior.ColorIndex = z
               Wert = .Cells(z + 1, 5).Interior.Color
               On Error Resume Next
               .Cells(z + 1, 1) = Wert Mod 256
               Wert = (Wert - .Cells(z + 1, 1)) / 256
               .Cells(z + 1, 2) = Wert Mod 256
               Wert = (Wert - .Cells(z + 1, 2)) / 256
               .Cells(z + 1, 3) = Wert Mod 256
           Next z
       End With
       Application.EnableEvents = True
    End Sub
  3. Farbwert in UserForm verwenden: Um den Farbwert in einer UserForm zu verwenden, setze den Interior.Color einer TextBox wie folgt:

    Me.TextBox1.BackColor = Cells(1, 1).Interior.Color

Häufige Fehler und Lösungen

  • Falsche RGB-Werte: Wenn die RGB-Werte nicht den Erwartungen entsprechen, überprüfe, ob der ColorIndex korrekt gesetzt ist. Es ist wichtig, dass du die Zelle mit Interior.Color abfragst, um den richtigen Wert zu erhalten.

  • Farbindex ist 0: Wenn ColorIndex auf 0 gesetzt ist, bedeutet es, dass die Zelle keinen speziellen Farbwert hat. Stelle sicher, dass du einen gültigen Index von 1 bis 56 verwendest.


Alternative Methoden

  • Verwendung von VBA.ColorIndex mit einer Tabelle: Du kannst eine separate Tabelle erstellen, in der die ColorIndex-Werte und ihre entsprechenden RGB-Werte gespeichert sind. Dies erleichtert die Zuordnung und ist besonders nützlich, wenn du häufig Farbänderungen vornimmst.

  • QBColor Funktion: Diese Funktion kann dir auch helfen, Farbnummern in RGB-Werte zu konvertieren, allerdings ist sie auf die ersten 15 Farben beschränkt. Für die vollständige Palette solltest du Interior.Color verwenden.


Praktische Beispiele

  1. Farbänderung einer Zelle:

    Sub ChangeCellColor()
       ActiveCell.Interior.ColorIndex = 3 ' Setzt die Zelle auf Rot
    End Sub
  2. Abrufen des RGB-Wertes einer Zelle:

    Sub GetCellRGB()
       Dim r As Long, g As Long, b As Long
       Dim Wert As Long
    
       Wert = ActiveCell.Interior.Color
       r = Wert Mod 256
       g = (Wert \ 256) Mod 256
       b = (Wert \ 65536) Mod 256
    
       MsgBox "RGB: " & r & ", " & g & ", " & b
    End Sub

Tipps für Profis

  • Verwende With-Anweisungen: Dies reduziert den Code und verbessert die Lesbarkeit. So kannst du mehrere Eigenschaften einer Zelle oder eines Objekts in einer einzigen Anweisung ändern.

  • ColorIndex vs. RGB: Nutze ColorIndex, wenn du mit standardisierten Farben arbeitest, und RGB, wenn du spezifische Farbtöne benötigst.

  • Optimierung von Farbtabelle: Erstelle eine ColorIndex-Tabelle in einem separaten Arbeitsblatt, um die Verwaltung und das Abrufen von Farben zu vereinfachen.


FAQ: Häufige Fragen

1. Wie viele Farben unterstützt Excel?
Excel unterstützt 56 Standardfarben im ColorIndex.

2. Wie kann ich den ColorIndex einer Zelle ändern?
Du kannst den ColorIndex einer Zelle einfach mit Cells(row, column).Interior.ColorIndex = value setzen, wobei value zwischen 1 und 56 liegen sollte.

3. Was mache ich, wenn die RGB-Werte nicht stimmen?
Überprüfe die Zelle, um sicherzustellen, dass der ColorIndex korrekt gesetzt ist und dass du die Interior.Color-Eigenschaft abfragst, um den richtigen Farbwert zu erhalten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige