Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Excel Makro erstellt Grafik aus Tabellendaten - färbt Zellen

Frage Entwicklung VB for Applications

Mitglied: t0laah

t0laah (Level 1) - Jetzt verbinden

19.08.2012 um 10:48 Uhr, 5421 Aufrufe, 9 Kommentare

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: 601b5fe059265452b5221c7106bfd5ba - Klicke auf das Bild, um es zu vergrößern
Mitglied: bastla
19.08.2012, aktualisiert um 15:06 Uhr
Hallo t0laah und willkommen im Forum!

Das ginge anhand Deines Beispiels etwa so:
01.
Option Base 1 
02.
Sub MakeGraph() 
03.
QuelleAbZeile = 7 'ab dieser Zeile Daten lesen 
04.
QuelleSpalten = Array("C", "F", "H", "J") 'aus diesen Spalteb Daten lesen 
05.
 
06.
ZielAbZeile = 2 'ab dieser Zeile Daten eintragen / Zellen färben 
07.
ZielAbSpalte = 3 'ab dieser Spalte Daten eintragen / Zellen färben 
08.
 
09.
MaschinenAnzahl = 2 
10.
JobFarben = Array(43, 37, 3) 'Farbwerte für Jobs festlegen 
11.
 
12.
Cells(ZielAbZeile, ZielAbSpalte).Resize(MaschinenAnzahl, Columns.Count - ZielAbSpalte).Clear 'Zielbereich löschen 
13.
 
14.
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen 
15.
Do While Cells(QZ, QuelleSpalten(1)).Value <> "" 'solange in der ersten Quellspalte Werte stehen 
16.
    'Daten auslesen 
17.
    Maschine = Cells(QZ, QuelleSpalten(1)).Value 
18.
    Job = Cells(QZ, QuelleSpalten(2)).Value 
19.
    Dauer = Cells(QZ, QuelleSpalten(3)).Value 
20.
    Start = Cells(QZ, QuelleSpalten(4)).Value 
21.
 
22.
    'Zielkoordinaten bestimmen 
23.
    ZZ = ZielAbZeile + Maschine - 1 
24.
    ZS = ZielAbSpalte + Start - 1 
25.
     
26.
    Cells(ZZ, ZS).Value = "J" & Job 'Jobnummer in erste Zielzelle eintragen 
27.
    If Dauer > 1 Then Cells(ZZ, ZS + 1).Value = "D=" & Dauer 'Dauer in zweite Zielzelle eintragen 
28.
     
29.
    For i = 1 To Dauer 'Zielzellen entsprechend Dauer durchlaufen 
30.
        Cells(ZZ, ZS + i - 1).Interior.ColorIndex = JobFarben(Job) 'Zielzelle entsprechend Jobnummer einfärben 
31.
    Next 
32.
 
33.
    QZ = QZ + 1 'nächste Quellzeile 
34.
Loop 
35.
End Sub
Zum Thema (Standard-)Farbcodes ("ColorIndex"-Werte) zB http://excelwelt.de/Excelallg/farb.html

Grüße
bastla
Bitte warten ..
Mitglied: 76109
19.08.2012, aktualisiert um 13:32 Uhr
@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
Bitte warten ..
Mitglied: Biber
19.08.2012, aktualisiert um 15:29 Uhr
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 :

  • 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

Grüße
Biber
Bitte warten ..
Mitglied: bastla
19.08.2012, aktualisiert um 15:16 Uhr
Hallo Biber!

Da ich ja nun leider auch nicht programmieren kann, aber Deinen Vorschlag gut finde, bastle ich eben etwas :
01.
Option Base 1 
02.
Sub MakeGraph() 
03.
QuelleAbZeile = 7 'ab dieser Zeile Daten lesen 
04.
QuelleSpalten = Array("C", "F", "H", "J") 'aus diesen Spalteb Daten lesen 
05.
QuelleSpalteJobFarben = "M" 'aus dieser Spalte die Job-Farben ermitteln 
06.
 
07.
ZielAbZeile = 2 'ab dieser Zeile Daten eintragen / Zellen färben 
08.
ZielAbSpalte = 3 'ab dieser Spalte Daten eintragen / Zellen färben 
09.
 
10.
MaschinenAnzahl = 2 
11.
 
12.
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen 
13.
Do While Cells(QZ, QuelleSpalteJobFarben).Value <> "" 'solange in der "JobFarbenSpalte" Inhalte stehen 
14.
    JF = JF & " " & Cells(QZ, QuelleSpalteJobFarben).Interior.Color 'Farbe für Job aus Zelle übernehmen 
15.
    QZ = QZ + 1 'nächste Zeile 
16.
Loop 
17.
JobFarben = Split(JF) 'Array aus gesammelten Werten erzeugen 
18.
 
19.
Cells(ZielAbZeile, ZielAbSpalte).Resize(MaschinenAnzahl, Columns.Count - ZielAbSpalte).Clear 'Zielbereich löschen 
20.
 
21.
QZ = QuelleAbZeile 'in Startzeile für Quelldaten beginnen 
22.
Do While Cells(QZ, QuelleSpalten(1)).Value <> "" 'solange in der ersten Quellspalte Werte stehen 
23.
    'Daten auslesen 
24.
    Maschine = Cells(QZ, QuelleSpalten(1)).Value 
25.
    Job = Cells(QZ, QuelleSpalten(2)).Value 
26.
    Dauer = Cells(QZ, QuelleSpalten(3)).Value 
27.
    Start = Cells(QZ, QuelleSpalten(4)).Value 
28.
 
29.
    'Zielkoordinaten bestimmen 
30.
    ZZ = ZielAbZeile + Maschine - 1 
31.
    ZS = ZielAbSpalte + Start - 1 
32.
     
33.
    Cells(ZZ, ZS).Value = "J" & Job 'Jobnummer in erste Zielzelle eintragen 
34.
    If Dauer > 1 Then Cells(ZZ, ZS + 1).Value = "D=" & Dauer 'Dauer in zweite Zielzelle eintragen 
35.
 
36.
    For i = 1 To Dauer 'Zielzellen entsprechend Dauer durchlaufen 
37.
        Cells(ZZ, ZS + i - 1).Interior.Color = JobFarben(Job) 'Zielzelle entsprechend Jobnummer einfärben 
38.
    Next 
39.
    QZ = QZ + 1 'nächste Quellzeile 
40.
Loop 
41.
End Sub
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 "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 ...
Bitte warten ..
Mitglied: Biber
19.08.2012, aktualisiert um 15:28 Uhr
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
Bitte warten ..
Mitglied: bastla
19.08.2012 um 15:36 Uhr
[OT]
Hallo Biber!

Du würdest mir ernsthaft Bewegung zumuten/-trauen?

Grüße
bastla
[/OT]
Bitte warten ..
Mitglied: Biber
19.08.2012, aktualisiert um 18:56 Uhr
[Re: OT]
Moin bastla,

Zitat von bastla:
[OT]
Hallo Biber!

Du würdest mir ernsthaft Bewegung zumuten/-trauen?
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]

Grüße zurück
Biber
[/Re: OT]
Bitte warten ..
Mitglied: t0laah
20.08.2012 um 07:09 Uhr
Hallo Bastla, Didi und Biber

ui, ihr seht ja alle, dass ich hier Frischling bin.. :D

danke für eure Hilfe, vielen Anregungen und Tipps - entschuldigt, dass ich erst jetzt Antworte.

Die Lösung von Bastla hab ich aber gestern noch mitnehmen können (ganz großes DANKE! hätte ich selbst niemals hinbekommen)

Habe mir das jetzt soweit angepasst, dass ich Daten und Grafik getrennt habe (verschiedene Tabellenblätter, DATA und MASTER) und auch mehr Maschinen und Jobs drin habe (2M +3Jobs war nur für dieses Forum - soll ja nicht unnötig kompliziert werden).

Die Tabelle wird je nach Berechnung dynamisch verändert (hab dafür das Lingo [Lindo Systems] und Job-Shop-Scheduling benutzt, falls jemand mal eine ähnliche Problemstellung hat.)

Ich denke meine Fragen sind soweit geklärt.
Danke nochmal an euch!
Bitte warten ..
Mitglied: Biber
20.08.2012 um 07:57 Uhr
Moin t0laah,

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:

Bitte setz den Beitrag auf "Erledigt/Gelöst", wenn die Frage hinreichend beantwortet ist (und du das nächste Mal angemeldet bist).

Danke
Biber
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Microsoft Office
gelöst Excel-Makro (7)

Frage von yuki13 zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel Makro : Erst prüfen bei erfolgreicher IF einen Wert überschreiben (4)

Frage von Matze1508 zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel Makro - Button "Springe zu Zeile mit heutigem Datum" (5)

Frage von hannsgmaulwurf zum Thema Microsoft Office ...

Microsoft Office
gelöst Excel 2010 Zellen mit bestimmten Inhalt mit Makro formartierten (5)

Frage von packmann2016 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...