Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1364to1368
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Produktionsplan in Excel VBA

Produktionsplan in Excel VBA
27.06.2014 13:49:57
Jürgen
Hey Leute,
ich versuche gerade, mit Excel VBA einen Produktionsplan für 10 Aufträge, die auf 5 Maschinen bearbeitet werden, zu erstellen. Dabei sollen die Bearbeitungszeiten über die Tabelle eingelesen werden.
Die Bearbeitungsreihenfolge der einzelnen Tasks auf den Maschinen wird über eine zweite Tabelle angegeben. (Bsp: Auftrag 1: MAschinenreihenfolge 3-1-5-4-2).
Der einfachste Algorithmus dafür ist "first come - first serve".
Als Ergebnis soll das Programm ein Gantt-Diagramm ausgeben.
Bisher habe ich die Daten eingelesen, aber ich komme nicht weiter, kann mir jemand helfen? Meine Datei ist unter

Die Datei https://www.herber.de/bbs/user/91292.xlsm wurde aus Datenschutzgründen gelöscht

einsehbar.
LG

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Produktionsplan in Excel VBA
29.06.2014 04:45:38
Franc
Hab mal was zusammengeschustert.
Problem aktuell dürfte noch sein das die Ausnutzung der Maschinen noch nicht optimiert wurde. (ist mir auch grad nix zu eingefallen ^^)
Da ich nicht genau wußte wie die Ausgabe aussehen soll, habe ich es erstmal ganz einfach gehalten.
Keine farblichen Markierungen und kein zusammenfassen.
Auf der 1. Seite sieht man die zusammengerechneten Zeiten
Die Zeiten für 1 Werkstück weicht aber ab, weil die Auswertung nur nach der Position geht.
Somit kann die Zeit bis zur "Fertigstellung" (deutlicher) höher sein als die reine Zeit wenn man die Minuten addiert.
Trotzdem ist die Zeit zur Fertigstellung aller Aufträge geringer als die der Summe der einzelnen Aufträge.
"Application.ScreenUpdating" ist da momentan nicht drin - also nicht wundern wenn man alles sieht und es dadurch etwas länger dauert.
Falls du das anders willst, musst du eine genauere Beschreibung liefern und am besten ein Beispielblatt wo vorne Zeiten stehen und bei Ergebnis das, was du haben willst.

Die Datei https://www.herber.de/bbs/user/91307.xlsm wurde aus Datenschutzgründen gelöscht


Anzeige
AW: Produktionsplan in Excel VBA
29.06.2014 04:54:08
Franc
ähm gibt noch nen kleinen "Bug" mit der Zeitskala ^^
die rechnerische max. zeit für einen Auftrag ist nicht unbedingt die max. Zeit bis alles fertig ist.
aber schau erstmal obs prinzipiell so ist wie du es willst

AW: Produktionsplan in Excel VBA
29.06.2014 18:04:44
TripleX
Hey Franc,
das sieht super aus,
Das Ergebnis soll im Sheet Ergebnisse zusätzlich noch als Gantt-Diagramm
zur besseren Veranschaulichung dargestellt werden.
Damit kämpfe ich gerade, die Achsen werden mit der Zeit (nach rechts)
und mit den Maschinen (nach oben) belegt, sodass ersichtlich ist,
wann welcher Auftrag welche Maschine belegt.
Hast du eine Idee?
Grüße

Anzeige
AW: Produktionsplan in Excel VBA
29.06.2014 21:35:49
Franc
Im Prinzip muss man ja nur die Ausgabe anpassen. ^^
Ich muss aber sagen das ich bis gestern nicht mal wusste was ein Gantt Diagramm ist. ^^
ist die aktuelle Anzeige total daneben?
Kannst du am besten mal zeigen wie das aussehen soll wenn das fertig ist? (dann kann ich daran arbeiten das so hinzubekommen wies sein soll ^^)

AW: Produktionsplan in Excel VBA
29.06.2014 21:52:58
Franc
So - hier noch zusätzlich nach die Maschinen darunter.
Weiß aber wie geschrieben nicht genau wie das Gantt Diagramm aussehen soll. Lad da bitte noch mal ne Beispiel Datei hoch.
A1 P1 = Auftrag 1 Position 1 ^^ ect
Zeitskala ist noch nicht korrigiert aber erstmal egal ^^
https://www.herber.de/bbs/user/91319.xlsm

Anzeige
AW: Produktionsplan in Excel VBA
29.06.2014 21:56:17
Franc
Ah - Ergänzung
Das nach Maschinen aufgelistete prüft aktuell nicht ob das Werkstück zu dem Zeitpunkt bereitsteht. (bei dem oberen Diagramm was nach Auftrag geht wurde das indirekt mit berücksichtigt.
Wenn da zum Beispiel für Position 2 (2. Bearbeitungssschritt?) Maschine 1 steht die sagen wir ni zu tun hat, dann kan die ja nicht direkt loslegen, wenn das Werkstück dafür noch in der anderen Maschine ist.
Soll das denn generell berücksichtigt werden?

AW: Produktionsplan in Excel VBA
29.06.2014 23:56:09
TripleX
"Wenn da zum Beispiel für Position 2 (2. Bearbeitungssschritt?) Maschine 1 steht die sagen wir ni zu tun hat, dann kan die ja nicht direkt loslegen, wenn das Werkstück dafür noch in der anderen Maschine ist.
Soll das denn generell berücksichtigt werden?" Ja Doppelbelegungen sollen nicht möglich sein, d.h.
keine MAschine kann zwei Aufträge zur gleichen Zeit bearbeiten und jeder Auftrag kann immer nur auf einer Maschine bearbeitet werden.
Die zweite Tabelle sieht gut aus, allerdings fehlen die Leerzeiten der Maschinen
(ich bekomms einfach nicht hin... :( )
Ein Beispiel für so ein Gantt-Diagramm, wie das in etwa aussehen soll, findest du unter
http://www.xavo.com/content/xps_product_page/img/Features_MaterialColorCoding.jpg
Die einzelnen Tasks können ja dann eingefärbt werden. Das krieg ich hin.
Vielen Dank schon mal ;)

Anzeige
AW: Produktionsplan in Excel VBA
30.06.2014 07:22:28
ChristianM
Hallo Jürgen,
gleiches Prinzip wie bei Franc, hier mit einem Gantt-Chart.
Die Ausnutzung ist nicht optimal, eine Möglichkeit wäre hier ein lineares Gleichungssystem zu erstellen und dieses mit dem Solver zu lösen.
@Franc: bei deinem Code ist noch ein Fehler drin - zB. bei Auftrag 10, da wird Maschine 4 von Maschine 5 überschrieben.
Option Explicit
Sub TestIt()
Dim i As Long, j As Long, k As Long
Dim lngOrd As Long, lngMch As Long
Dim lngDur As Long, lngPos As Long
Dim lngMchPos() As Long, lngOrdPos() As Long
Dim lngWork() As Long, lngClr() As Long
Dim ch As Chart
Const ORDERS As Long = 10
Const MACHINES As Long = 5
ReDim lngWork(1 To ORDERS, 1 To MACHINES, 1 To 2)
ReDim lngMchPos(1 To MACHINES)
ReDim lngOrdPos(1 To ORDERS)
ReDim lngClr(1 To MACHINES)
lngClr(1) = RGB(255, 0, 0)      ' red
lngClr(2) = RGB(0, 255, 0)      ' green
lngClr(3) = RGB(0, 0, 255)      ' blue
lngClr(4) = RGB(255, 192, 0)    ' orange
lngClr(5) = RGB(255, 0, 255)    ' magenta
With Sheets("User-Eingaben")
For j = 1 To MACHINES
For i = 1 To ORDERS
If .Cells(i + 16, j + 2) > 0 Then
lngMch = .Cells(i + 16, j + 2)
If .Cells(i + 2, lngMch + 2) > 0 Then
lngOrd = i
lngDur = .Cells(i + 2, lngMch + 2)
lngPos = Application.Max(lngOrdPos(lngOrd), lngMchPos(lngMch))
lngWork(lngOrd, lngMch, 1) = lngPos
lngWork(lngOrd, lngMch, 2) = lngDur
lngOrdPos(lngOrd) = lngPos + lngDur
lngMchPos(lngMch) = lngPos + lngDur
End If
End If
Next
Next
End With
With Sheets("Ergebnisse")
.Cells.Delete
.Cells(1, 1).Resize(, 3) = Array("Auftrag-Maschine", "Start", "Dauer")
k = 2
For i = 1 To ORDERS
For j = 1 To MACHINES
.Cells(k, 1) = "Auftr-" & i & "_Masch-" & j
.Cells(k, 2) = lngWork(i, j, 1)
.Cells(k, 3) = lngWork(i, j, 2)
k = k + 1
Next
Next
.Columns(1).Resize(, 3).AutoFit
Set ch = .Shapes.AddChart.Chart
ch.ChartType = xlBarStacked
ch.SetSourceData Source:=.Cells(2, 1).Resize(k - 2, 3)
ch.SeriesCollection(1).Format.Fill.Visible = msoFalse
ch.ChartArea.Left = .Cells(1, 5).Left
ch.ChartArea.Top = 0
ch.ChartArea.Height = ORDERS * MACHINES * 15
ch.ChartArea.Width = 600
ch.Axes(xlCategory).ReversePlotOrder = True
ch.Axes(xlCategory).TickMarkSpacing = MACHINES
ch.SetElement (msoElementPrimaryCategoryGridLinesMajor)
ch.HasLegend = False
For i = 1 To MACHINES * ORDERS Step MACHINES
For j = 1 To MACHINES
ch.SeriesCollection(2).Points(i + j - 1).Format.Fill.ForeColor.RGB = lngClr(j)
Next
Next
End With
Set ch = Nothing
End Sub
Gruß
ChristianM
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige