Excel Makro erstellt Grafik aus Tabellendaten - färbt Zellen
Hallo,
ich möchte eine Maschinenbelegungsplanung in Excel machen.
Die Daten dazu habe ich bereits errechnet.
Jetzt soll eine Tabelle in ein Grafik gewandelt werden.
Exceldiagramme bieten nicht genügend Freiheiten (leerräume zwischen Balken), daher will ich auf einem Blanko-Tabellenblatt Zellen einfärben:
Maschine belegt = Farbe des Jobs
Maschine frei = weis
Ich habe zwei Maschinen und drei Jobs:
Job1 grün
Job2 blau
Job3 rot
Wie kann ich in VBA sagen: Lese Tabelle und färbe die Zellen - also für Job1 von C2 beginnend, fünf (=Dauer) Felder grün färben, dann Job2...)?
Exceldatei hier:
https://dl.dropbox.com/u/8152929/misc/administrator.de/syxbysis_min_v1.x ...
so solls aussehen:
ich möchte eine Maschinenbelegungsplanung in Excel machen.
Die Daten dazu habe ich bereits errechnet.
Jetzt soll eine Tabelle in ein Grafik gewandelt werden.
Exceldiagramme bieten nicht genügend Freiheiten (leerräume zwischen Balken), daher will ich auf einem Blanko-Tabellenblatt Zellen einfärben:
Maschine belegt = Farbe des Jobs
Maschine frei = weis
Ich habe zwei Maschinen und drei Jobs:
Job1 grün
Job2 blau
Job3 rot
Wie kann ich in VBA sagen: Lese Tabelle und färbe die Zellen - also für Job1 von C2 beginnend, fünf (=Dauer) Felder grün färben, dann Job2...)?
Exceldatei hier:
https://dl.dropbox.com/u/8152929/misc/administrator.de/syxbysis_min_v1.x ...
so solls aussehen:
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189816
Url: https://administrator.de/forum/excel-makro-erstellt-grafik-aus-tabellendaten-faerbt-zellen-189816.html
Ausgedruckt am: 13.05.2025 um 14:05 Uhr
9 Kommentare
Neuester Kommentar
Hallo t0laah und willkommen im Forum!
Das ginge anhand Deines Beispiels etwa so:
Zum Thema (Standard-)Farbcodes ("ColorIndex"-Werte) zB http://excelwelt.de/Excelallg/farb.html
Grüße
bastla
Das ginge anhand Deines Beispiels etwa so:
Option Base 1
Sub MakeGraph()
QuelleAbZeile = 7 'ab dieser Zeile Daten lesen
QuelleSpalten = Array("C", "F", "H", "J") 'aus diesen Spalteb Daten lesen
ZielAbZeile = 2 'ab dieser Zeile Daten eintragen / Zellen färben
ZielAbSpalte = 3 'ab dieser Spalte Daten eintragen / Zellen färben
MaschinenAnzahl = 2
JobFarben = Array(43, 37, 3) 'Farbwerte für Jobs festlegen
Cells(ZielAbZeile, ZielAbSpalte).Resize(MaschinenAnzahl, Columns.Count - ZielAbSpalte).Clear 'Zielbereich löschen
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen
Do While Cells(QZ, QuelleSpalten(1)).Value <> "" 'solange in der ersten Quellspalte Werte stehen
'Daten auslesen
Maschine = Cells(QZ, QuelleSpalten(1)).Value
Job = Cells(QZ, QuelleSpalten(2)).Value
Dauer = Cells(QZ, QuelleSpalten(3)).Value
Start = Cells(QZ, QuelleSpalten(4)).Value
'Zielkoordinaten bestimmen
ZZ = ZielAbZeile + Maschine - 1
ZS = ZielAbSpalte + Start - 1
Cells(ZZ, ZS).Value = "J" & Job 'Jobnummer in erste Zielzelle eintragen
If Dauer > 1 Then Cells(ZZ, ZS + 1).Value = "D=" & Dauer 'Dauer in zweite Zielzelle eintragen
For i = 1 To Dauer 'Zielzellen entsprechend Dauer durchlaufen
Cells(ZZ, ZS + i - 1).Interior.ColorIndex = JobFarben(Job) 'Zielzelle entsprechend Jobnummer einfärben
Next
QZ = QZ + 1 'nächste Quellzeile
Loop
End Sub
Grüße
bastla

@all
Zu den Farbtabellen wäre vielleicht noch zu erwähnen, dass die große Farbtabelle für Zellformatierungen gedacht sind und die kleine Farbtabelle in Charts (Diagramme) Verwendung findet, wobei die kleine aber auch über die Zellformatierung>Muster für Zellen verwendet werden kann.
Über die Zahlenanordung (ColorIndexe) habe ich mir auch schon den Kopf zerbrochen, aber leider keine vernünftige Erklärung dafür gefunden
Gruß Dieter
Zu den Farbtabellen wäre vielleicht noch zu erwähnen, dass die große Farbtabelle für Zellformatierungen gedacht sind und die kleine Farbtabelle in Charts (Diagramme) Verwendung findet, wobei die kleine aber auch über die Zellformatierung>Muster für Zellen verwendet werden kann.
Über die Zahlenanordung (ColorIndexe) habe ich mir auch schon den Kopf zerbrochen, aber leider keine vernünftige Erklärung dafür gefunden
Gruß Dieter
Moin t0laah, bsatla und didi1954,
@t0laah
Willkommen im Forum und danke für die sehr gute und vollständige Frage-Formulierung.
VBA ist nicht so mein Fachgebiet, aber grundsätzlich würde ich anregen, zumindest EIN Feature noch von den Nice-to-have/Machen wir später-Optionen umzubuchen zur Grundfunktionalität des Makros :
Deshalb würde ich - wenn ich programmieren könnte - die Zeile 10 in bastlas Lösung..
... frühzeitig "dynamisieren", d.h. hier z.B. die Farbwerte aus einem "benannten Bereich" der Tabelle ermitteln, der meinetwegen "Legende" heisst.
Und in dem das visualisiert ist, was t0laah hier beschrieben hat:
Grüße
Biber
@t0laah
Willkommen im Forum und danke für die sehr gute und vollständige Frage-Formulierung.
VBA ist nicht so mein Fachgebiet, aber grundsätzlich würde ich anregen, zumindest EIN Feature noch von den Nice-to-have/Machen wir später-Optionen umzubuchen zur Grundfunktionalität des Makros :
- Der Makro händelt im Moment drei fest verdrahtete Farben für heute auch genau max drei Jobs auf zwei Maschinen
- die Anzahl der Maschinen kann sicherlich für die Lebensdauer dieser Excellösung als "FIX" unterstellt werden - das sind heute 2 Maschinen und nächsten Dienstag auch noch und am 17. Oktober wohl auch noch
- Aber die Anzahl Jobs kann variieren, denke ich ... kann <= 3 sein, aber sicherlich auch mal 4 oder mehr.
Deshalb würde ich - wenn ich programmieren könnte - die Zeile 10 in bastlas Lösung..
JobFarben = Array(43, 37, 3) 'Farbwerte für Jobs festlegen
... frühzeitig "dynamisieren", d.h. hier z.B. die Farbwerte aus einem "benannten Bereich" der Tabelle ermitteln, der meinetwegen "Legende" heisst.
Und in dem das visualisiert ist, was t0laah hier beschrieben hat:
Ich habe zwei Maschinen und drei Jobs:
Job1 grün
Job2 blau
Job3 rot
Job1 grün
Job2 blau
Job3 rot
Grüße
Biber
Hallo Biber!
Da ich ja nun leider auch nicht programmieren kann, aber Deinen Vorschlag gut finde, bastle ich eben etwas
:
Es können jetzt vorweg die Zellen M7, M8, M9, ... (auch ein "Verbinden" der Zellen mit der/den Nachbarspalte/n (wie bei den Werten in den Spalten "C" oder "F" ist möglich) jeweils in der gewünschten Farbe des Jobs formatiert und müssen mit einem Eintrag (zB "Job1", "Job2", ...) versehen werden (damit erkennbar ist, wie viele Jobs es gibt) - dann werden diese Farben für die Zielzellen verwendet ...
Da jetzt RGB-Farbwerte verwendet werden, fällt auch die Einschränkung auf die per "
Grüße
bastla
P.S.: Da das Erweitern "benannter Bereiche" eher umständlich ist, habe ich die Zeile (= 1. Datenzeile, im Beispiel 7) und Spalte für den Beginn der "Legende" doch wieder fest verdrahtet ...
Da ich ja nun leider auch nicht programmieren kann, aber Deinen Vorschlag gut finde, bastle ich eben etwas
Option Base 1
Sub MakeGraph()
QuelleAbZeile = 7 'ab dieser Zeile Daten lesen
QuelleSpalten = Array("C", "F", "H", "J") 'aus diesen Spalteb Daten lesen
QuelleSpalteJobFarben = "M" 'aus dieser Spalte die Job-Farben ermitteln
ZielAbZeile = 2 'ab dieser Zeile Daten eintragen / Zellen färben
ZielAbSpalte = 3 'ab dieser Spalte Daten eintragen / Zellen färben
MaschinenAnzahl = 2
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen
Do While Cells(QZ, QuelleSpalteJobFarben).Value <> "" 'solange in der "JobFarbenSpalte" Inhalte stehen
JF = JF & " " & Cells(QZ, QuelleSpalteJobFarben).Interior.Color 'Farbe für Job aus Zelle übernehmen
QZ = QZ + 1 'nächste Zeile
Loop
JobFarben = Split(JF) 'Array aus gesammelten Werten erzeugen
Cells(ZielAbZeile, ZielAbSpalte).Resize(MaschinenAnzahl, Columns.Count - ZielAbSpalte).Clear 'Zielbereich löschen
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen
Do While Cells(QZ, QuelleSpalten(1)).Value <> "" 'solange in der ersten Quellspalte Werte stehen
'Daten auslesen
Maschine = Cells(QZ, QuelleSpalten(1)).Value
Job = Cells(QZ, QuelleSpalten(2)).Value
Dauer = Cells(QZ, QuelleSpalten(3)).Value
Start = Cells(QZ, QuelleSpalten(4)).Value
'Zielkoordinaten bestimmen
ZZ = ZielAbZeile + Maschine - 1
ZS = ZielAbSpalte + Start - 1
Cells(ZZ, ZS).Value = "J" & Job 'Jobnummer in erste Zielzelle eintragen
If Dauer > 1 Then Cells(ZZ, ZS + 1).Value = "D=" & Dauer 'Dauer in zweite Zielzelle eintragen
For i = 1 To Dauer 'Zielzellen entsprechend Dauer durchlaufen
Cells(ZZ, ZS + i - 1).Interior.Color = JobFarben(Job) 'Zielzelle entsprechend Jobnummer einfärben
Next
QZ = QZ + 1 'nächste Quellzeile
Loop
End Sub
Da jetzt RGB-Farbwerte verwendet werden, fällt auch die Einschränkung auf die per "
ColorIndex
" festgelegten Standard-Farben weg.Grüße
bastla
P.S.: Da das Erweitern "benannter Bereiche" eher umständlich ist, habe ich die Zeile (= 1. Datenzeile, im Beispiel 7) und Spalte für den Beginn der "Legende" doch wieder fest verdrahtet ...
Moin bastla,
danke schön!
Alle weiteren Verfeinerungen können nun wirklich warten, bis sich die heutigen Thermometerwerte halbiert haben..
...ich würde ja noch in Zeile 33 neben den "J"/"Job"-Zeiten eine Rubrik "U" für "Umrüstzeiten" der Maschinen vorsehen - aber hey! was versteh ich schon Maschinenbelegungsplänen....
BTW... ich radele jetzt erstmal zur nächsten Eisdiele... wahrscheinlich sitzt t0laah auch schon da,
Vielleicht solltest du auch mal einfach....
Grüße
Biber
danke schön!
Alle weiteren Verfeinerungen können nun wirklich warten, bis sich die heutigen Thermometerwerte halbiert haben..
...ich würde ja noch in Zeile 33 neben den "J"/"Job"-Zeiten eine Rubrik "U" für "Umrüstzeiten" der Maschinen vorsehen - aber hey! was versteh ich schon Maschinenbelegungsplänen....
BTW... ich radele jetzt erstmal zur nächsten Eisdiele... wahrscheinlich sitzt t0laah auch schon da,
Vielleicht solltest du auch mal einfach....
Grüße
Biber
[Re: OT]
Moin bastla,
Ich sach ma' so:
So viel Geduld, auf die Eröffnung eines Eiskugelbringdienstes in deiner Gegend zu warten...
-> das trau ich nicht mal dir zu, und ich halte deine Geduld für schier unerschöpflich.
Nur Mut - die Redensart heisst doch "die Trauben hängen zu hoch" - von Eiskugeln ist nicht die Rede.
Mein Eis vorhin war jedenfalls die Tor- bzw. Radtour wert.
Grüße zurück
Biber
[/Re: OT]
Moin bastla,
Ich sach ma' so:
So viel Geduld, auf die Eröffnung eines Eiskugelbringdienstes in deiner Gegend zu warten...
-> das trau ich nicht mal dir zu, und ich halte deine Geduld für schier unerschöpflich.
Nur Mut - die Redensart heisst doch "die Trauben hängen zu hoch" - von Eiskugeln ist nicht die Rede.
Mein Eis vorhin war jedenfalls die Tor- bzw. Radtour wert.
Grüße
bastla
[/OT]
bastla
[/OT]
Grüße zurück
Biber
[/Re: OT]
Moin t0laah,
Bitte setz den Beitrag auf "Erledigt/Gelöst", wenn die Frage hinreichend beantwortet ist (und du das nächste Mal angemeldet bist).
Danke
Biber
Zitat von @t0laah:
Hallo Bastla, Didi und Biber
ui, ihr seht ja alle, dass ich hier Frischling bin.. :D
Ich denke meine Fragen sind soweit geklärt.
Danke nochmal an euch!
Hmmmm, dann noch als kleiner Hinweis an den Forums-Frischling:Hallo Bastla, Didi und Biber
ui, ihr seht ja alle, dass ich hier Frischling bin.. :D
Ich denke meine Fragen sind soweit geklärt.
Danke nochmal an euch!
Bitte setz den Beitrag auf "Erledigt/Gelöst", wenn die Frage hinreichend beantwortet ist (und du das nächste Mal angemeldet bist).
Danke
Biber