Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

ColorIndex Nummern der Standard Farbpalette anzeigen lassen





Frage

Hallo an alle da draußen. Ich habe 2 Problemchen. Das Erste: Ich habe den Zellen B8 bis B14 Namen zugewiesen. Jeder Name hat eine andere Farbe. Von D8 bis D14 steht jeweils ein Startdatum und von E8 bis E14 ein Enddatum. In der Zeile 4 von H bis DZ habe ich das fortlaufende Datum eingetragen (01.06.2006 bis 01.10.2006). Ich möchte nun in der Zeile 7 von H bis DZ einen farbigen Balken in Abhängigkeit der jeweiligen Start und Endtermine der Spalten D und E darstellen. Folgende Überlegung möchte ich realisieren: Wenn Start (D8)<=Datum(...$4)<Ende (E8) dann Farbe himmelblau oder Wenn Start (D9)<=Datum(...$4)<Ende (E9) dann Farbe türkis... Bedingte Formatierung habe ich nur noch eine frei, da 2 bereits belegt sind. Vielleicht hat jemand einen Tipp für mich, wie ich das realisieren soll... Am liebsten mit VBA (auch wenn ich auf diesem Gebiet noch Anfänger bin) So zweite Frage: Was ich schon mitbekommen habe ist, dass das einfärben der Felder mit ColorIndex funktioniert. Allerdings fehlen mir die Indexnummern zu folgenden Farben: -himmelblau -türkis -grelles grün -gold -helles orange -hellgrün -orange Das sind Farben aus der Standard Palette. Allerdings werden in der VBA Hilfe nicht die Farben gezeigt, die ich brauche. Bin für jeden Hinweis dankbar bye

Antwort 1 von Saarbauer

hallo,

meinst du sowas

https://supportnet.de/threads/1367047

AW 1

Gruß

Helmut

Antwort 2 von coros

Hallo Zoe-Jane,

schau Dir mal auf meiner HP in der Rubrik Beispieldateien das Beispiel 60 an. Eventuell ist das ja schon so ähnlich wie Du Dir das vorgestellt hast.

Bei Fagen melde Dich bitte wieder.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von Zoe-Jane

Hallo Helmut.

Vielen Dank für die schnelle Antwort zu meinem 2. Problem. Das war das was ich brauchte.

Aber hast evtl. auch nen Text zu meinem erstgeschilderten Problem?

Antwort 4 von Saarbauer

Hallo,

leider zur zeit keine passende Idee

Gruß

Helmut

Antwort 5 von Zoe-Jane

Hallo auch dir coros.

Danke erstmal für die Info.
Hab mir die Sache mal angeschaut und bin am basteln.
Momentanes Problem dabei: ich brauchs nicht in jeder Zeile, sondern die Farben sollen folgend aufeinander in der Zeile 7 zurückgegeben werden.

MfG Zoe

Antwort 6 von coros

Hallo Zoe,

sorry, aber ich habe die Bedingungen für die Farbumschläge und die Farben, die in Zeile 7 dann dargestellt werden sollen, nicht richtig verstanden. Kannst Du die Bedingung noch mal etwas genauer erklären?

Danke!

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 7 von Zoe-Jane

Nochmal Hallo.

Also ich betrachte die Spalten B (Name), D (Start) und E (Ende) und die Zeilen 4 (von H bis DZ mit Datumsangaben 01.06.2006 bis 01.10.2006) und 7 (von H bis DZ noch nicht ausgefüllt-soll Farbe bekommen).

Bsp. Hr. X (Zeile 8, Farbe: blau) beginnt am 01.06. mit einem Projekt, das er am 10.06. beendet.
Hr. Y (Zeile 9, Farbe: grün) übernimmt am 10.06. das Projekt bis 15.07. ...
Nun sollen die Zeitabschnitte in einer Zeile, der Zeile 7, (von H bis DZ) zusammenhängend dargestellt werden. Also vom 01.06. (H7) bis 10.06. (Q7) ein blauer Balken und vom 10.06. (Q7) bis 15.07. (AZ 7) ein grüner Balken.

Ich hoffe das hilft dir weiter coros

Muss jetzt erstmal los und kann mir erst morgen wieder eure Tips anschauen. Also nicht böse sein, wenn ich mich heute nicht mehr melde.
Auf alle Fälle danke ich für die bisher erbrachte Hilfe und natürlich im Voraus für weitere Hilfestellungen.

In diesem Sinne schö Tach noch
MfG Zoe

Antwort 8 von coros

Hallo Zoe,

mit nachfolgendem Makro sollte das funktionieren, was Du Dir vorgestellt hast. Kopie es bitte in ein StandardModul und starte es z.B. in über eine Schaltfläche.

Option Explicit

Sub Zellen_nach_Datum_färben()
Dim iRow As Long, iCol As Integer, Anfang As Integer, Ende As Integer, Farbe As Integer
For iRow = 8 To Range("B65536").End(xlUp).Row
      Farbe = Cells(iRow, 2).Interior.ColorIndex
    For iCol = 8 To 130
        If Cells(iRow, 4) = Cells(4, iCol) Then
        Anfang = iCol
        GoTo Weiter
        End If
    Next
Weiter:
    For iCol = 8 To 130
        If Cells(iRow, 5) = Cells(4, iCol) Then
        Ende = iCol
        GoTo Ende
        End If
    Next
Ende:
Range(Cells(7, Anfang), Cells(7, Ende)).Interior.ColorIndex = Farbe
Next
End Sub


Hier wird jede Zeile, in der in Spalte B ein Name steht, in Spalte D und E nach Start- und Enddatum mit dem Bereich H4:DZ4 verglichen. Die Zeiträume zwischen dem Start- und Enddatum werden in Zeile mit der Farbe gefärbt, die in Spalte B, also beim Namen, die Hintergrundfarbe hat. Als Beispiel, hat der Name in Spalte B die Hintergrundfarbe rot, wird der Bereich in Zeile 7, der zwischen dem Star- und Enddatum liegt, rot gefärbt.

Ich hoffe, Du meinetst das so. bei Fragen oder Änderungswünschen melde Dich bitte.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 9 von Zoe-Jane

Einen wunderschönen Guten Morgen Coros.

Vielen Dank für diese Zeilen. Sie machen genau das was ich will.
Du hast mir echt den Tag gerettet, denn damit kann ich weiter arbeiten.

Mal noch ne Frage am Rande:
Ich würde mich gern intensiver mit der VBA Programmierung befassen, kannst du mir evtl. Literatur empfehlen, mit der ich das im Selbststudium relativ einfach hinbekomme?

Danke nochmal
MfG Zoe

Antwort 10 von coros

Moin Zoe,

sorry, ohne jetzt überheblich klingen zu wollen, aber ich habe über VBA (Visual Basic for Application), das ja in Excel zum Einsatz kommt, keine Literatur. Ich habe das alles durch viel lesen in Foren via Learning by doing selbst beigebracht. Mir hat sicherlich viel dabei geholfen, dass ich aus beruflichen Gründen viel in Visual Basic (nicht zu verwechseln mit VBA, ist ähnlich aber nicht das Gleiche) programmiere. Da ist dann der Schritt zu VBA nicht mehr so groß.

Eventuell hat ja jemand anderes, der Deine Frage hier ließt, einen Buchvorschlag für Dich. Ansonsten kann ich Dir nur empfehlen, z.B. in dem Forum www.VB-Fun.de oder in der microsoft.public.de.excel- Group vorbei zu schauen, da kann man viel lernen, wenn es um Excel- VBA geht.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 11 von Zoe-Jane

OK Danke coros.

Hab da noch ne Frage zu dem von dir geschriebenen Programm.
Wie sieht es mit Überschneidungen aus? Habe festgestellt, dass sich bei weiteren Einträgen einige Daten überschneiden. Z.B. Herr X vom 01.06.-15.06. und Herr Y schon vom 10.06.-14.07 oder so. Wie muss ich das Programm anpassen, dass es mir die Farben immer vom Endtermin des letzten Ereignisses ausgehend darstellt? Also laut Bsp. statt vom 01.06-15.06 nur bis zum Anfang von Herrn Y also 01.06.-10.06 in z.B. grün und vom 10.06.-14.07. dann die Farbe für Herrn Y...

Antwort 12 von Zoe-Jane

Nochmal ich an coros...

Vergiss das mit den Überschneidungen, das paßt schon so.
Hab dafür ne andere Frage:
Ich möchte den Bereich einschränken. Damit meine ich, dass in Zeile 7 nur die Auswertung der der Zeilen 8 bis 16 dargestellt werden sollen. Das hab ich hingekriegt mit der Einschränkung

For iRow=8 to Range("B16").End(xlUp).Row

Nun würde ich aber gern eine nächste Abfrage starten für den Bereich Zeilen 19-27 und die Farbausgabe in Zeile 18.
Kann man das für das ganze Blatt so realisieren, dass die gleiche Anzahl an Zellen verwendet wird? Konkret: die Ausgabe der Farbe in einer Zeile der Zahlenreihe 7,18,29,... entspricht und sich auf die jeweils folgenden 8-16,19-27,30-38,... Zellen bezieht.

Danke und MfG Zoe

Antwort 13 von coros

Hallo Zoe,

da hast Du glück, dass ich vorm Abschicken des Beitrags von mir noch mal aktualisiert habe. Denn ich dachte Du hattest Dich irgendwie vertan mit Deinen Beispielen. Denn das Makro machte ja bereits dass immer der Anfangstermin einen bereits vorhandenen Termin überschrieben hat. Ich dachte nun, bzw. teilweise hattest Du es ja auch so geschrieben (daher dachte ich, dass Du Dich irgendwie vertan hast) dass immer bei Überschneidung der neue Termin am Ende des Enddatums des Vorgängers erst angezeigt werden soll. Dafür hatte ich ach das Makro abgeändert. Aber das hast Du ja nun mitbekommen, dass das Makro aus Antwort 8 das macht. Aber trotzdem poste ich auch mal das abgeänderte Makro nun hier, dass immer erst nach dem Enddatum des Vorgängers den neuen Termin einträgt. Eventuell kann es ja jemand gebrauchen.

Option Explicit

Sub Zellen_nach_Datum_färben()
Dim iRow As Long, iCol As Integer, Anfang As Integer, Ende As Integer, Farbe As Integer, iColColor As Integer
Rows(7).Interior.ColorIndex = xlNone
For iRow = 8 To Range("B65536").End(xlUp).Row
      Farbe = Cells(iRow, 2).Interior.ColorIndex
    For iCol = 8 To 130
        If Cells(iRow, 4) = Cells(4, iCol) Then
            For iColColor = iCol To 130
                If Cells(7, iColColor).Interior.ColorIndex = xlNone Then
                    Anfang = iColColor
                    GoTo Weiter
                End If
            Next
        End If
    Next
Weiter:
    For iCol = 8 To 130
        If Cells(iRow, 5) = Cells(4, iCol) Then
                If Cells(7, iCol).Interior.ColorIndex = xlNone Then
                    Ende = iCol
                    GoTo Ende
                Else
                    GoTo Ende1
                End If
        End If
    Next
Ende:
Range(Cells(7, Anfang), Cells(7, Ende)).Interior.ColorIndex = Farbe
Ende1:
Next
End Sub


Nun zu Deiner neuen Frage, da musst Du diesen Code mehrfach aneinanderhängen und immer den Start- und Endparameter der Schleife verändern. Das würde für Dein Beispiel dann folgendermaßen aussehen:

Option Explicit

Sub Zellen_nach_Datum_färben()
Dim iRow As Long, iCol As Integer, Anfang As Integer, Ende As Integer, Farbe As Integer
For iRow = 8 To 16
Farbe = Cells(iRow, 2).Interior.ColorIndex
For iCol = 8 To 130
If Cells(iRow, 4) = Cells(4, iCol) Then
Anfang = iCol
GoTo Weiter
End If
Next
Weiter:
For iCol = 8 To 130
If Cells(iRow, 5) = Cells(4, iCol) Then
Ende = iCol
GoTo Ende
End If
Next
Ende:
Range(Cells(7, Anfang), Cells(7, Ende)).Interior.ColorIndex = Farbe
Next

For iRow = 19 To 27
Farbe = Cells(iRow, 2).Interior.ColorIndex
For iCol = 8 To 130
If Cells(iRow, 4) = Cells(4, iCol) Then
Anfang = iCol
GoTo Weiter
End If
Next
Weiter:
For iCol = 8 To 130
If Cells(iRow, 5) = Cells(4, iCol) Then
Ende = iCol
GoTo Ende
End If
Next
Ende:
Range(Cells(18, Anfang), Cells(18, Ende)).Interior.ColorIndex = Farbe
Next

For iRow = 30 To 38
Farbe = Cells(iRow, 2).Interior.ColorIndex
For iCol = 8 To 130
If Cells(iRow, 4) = Cells(4, iCol) Then
Anfang = iCol
GoTo Weiter
End If
Next
Weiter:
For iCol = 8 To 130
If Cells(iRow, 5) = Cells(4, iCol) Then
Ende = iCol
GoTo Ende
End If
Next
Ende:
Range(Cells(29, Anfang), Cells(29, Ende)).Interior.ColorIndex = Farbe
Next

Rem usw.........
End Sub


Das ist erst mal die einfachste Lösung. Wenn es nicht zu viele Bereich sind, die damit abgefragt werden müssen, funktioniert es auch ganz gut. Ansonsten muss man sich da mal etwas anderes überlegen.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 14 von Zoe-Jane

Hallo Oli.

Ich sag nur: Merci Cheri (kurzum Danke).
Mach weiter so.
Falls ich wieder mal ein Problem haben sollte, lesen wir vielleicht wieder voneinander.

Bis dahin lass es dir gut gehen...

MfG Zoe

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: