Ich habe (mal wieder) ein Problem und hoffe, dass ihr mir weiterhelfen könnt.
Ich habe zwei Tabellen:
Die obere Tabelle zeigt die verfügbaren Kapazitäten von vier Lagern, in die Produkte eingelagert werden können.
In der unteren Tabelle sind Liefermengen von Produkten dargestellt. Einige dieser Produkte müssen unbedingt an festgelegten Stellen gelagert werden (z.B. "Lagerstelle 1-2") und einige können flexibel gelagert werden (z.B. "Lagerstelle 1-3"). Lagerstelle 1-3 heißt dann, dass die Produkte in allen freien Kapazitäten der Lagerstellen 1-2 und Lagerstellen 2-3 gelagert werden können. Die flexiblen Produkte sind in der Tabelle so gestaffelt, dass zuerst die angeordnet sind, die an mehr als einer Lagerstelle gelagert werden können, dann kommen die für mehr als zwei Lagerstellen, usw..
Mein Vorgehen ist, dass ich erst die Produkte abarbeite, die an festen Lagerstellen gelagert werden und dann - falls noch Kapazität verfügbar ist - die flexiblen Produkte verteile.
Beispielhafte Struktur der Tabellen:
Lagerkapazität:
_______Produkt A | Produkt B
Lagerstelle 1-2 | 2 | 4
Lagerstelle 2-3 | 3 | 2
Lagerstelle 3-4 | 4 | 5
Lagerstelle 4-5 | 5 | 8
Liefermengen:
_______Produkt A | Produkt B
Fest:
Lagerstelle 1-2 | 0 | 0
Lagerstelle 2-3 | 0 | 0
Lagerstelle 3-4 | 0 | 0
Lagerstelle 4-5 | 0 | 0
Flexibel
(2 Lagerstellen):
Lagerstelle 1-3 | 0 | 0
Lagerstelle 2-4 | 0 | 0
Lagerstelle 3-5 | 0 | 0
(3 Lagerstellen):
Lagerstelle 1-4 | 0 | 0
Lagerstelle 2-5 | 0 | 0
(4 Lagerstellen):
Lagerstelle 1-5 | 4 | 1
Mein Problem hierbei:
Die flexiblen Produkte sollen, nach der Staffelung verteilt werden (erst alle für zwei, dann alle für drei mögliche Lagerstellen, usw.)
Beispiel für die Verteilung von 4 Stück von Produkt A, die in "Lagerstelle 1-5" gelagert werden können: Erst soll die größte noch verfügbare Kapazität "befüllt" werden. Für den Fall, dass zwei oder mehr Kapazitäten gleich sind, dann soll die Priorität der Kapazitätfüllung bei Lagerstelle 1-2 am höchsten sein und von da absteigend.
Ein Code für flexible Produkte für mögliche 3 Lagerstellen sieht bei mir so aus:
Dim rngFlex As Range, FLEX As Range, Anz&, zaehler&
Set FLEX = Range("G23:H25")
For Each rngFlex In FLEX
Anz = rngFlex
For zaehler = Anz To 0 Step -1
If rngFlex.Offset(-7, 7) > rngFlex.Offset(-8, 7) And rngFlex.Offset(-7, 7) > rngFlex.Offset(-9, 7) Then
If rngFlex.Offset(-7, 7) > 0 And rngFlex > 0 Then
rngFlex = rngFlex - 1
rngFlex.Offset(-7, 7) = rngFlex.Offset(-7, 7) - 1
End If
ElseIf rngFlex.Offset(-8, 7) >= rngFlex.Offset(-7, 7) And rngFlex.Offset(-8, 7) > rngFlex.Offset(-9, 7) Then
If rngFlex.Offset(-8, 7) > 0 And rngFlex > 0 Then
rngFlex = rng3 - 1
rngFlex.Offset(-8, 7) = rngFlex.Offset(-8, 7) - 1
End If
Else
If rngFlex.Offset(-9, 7) > 0 And rngFlex > 0 Then
rngFlex = rngFlex - 1
rngFlex.Offset(-9, 7) = rngFlex.Offset(-9, 7) - 1
End If
End If
Next
Next
Da ich irgendwann viele Zellen habe, die ich miteinander vergleichen muss, um erst die größte Kapazität zu ermitteln, wollte ich fragen, ob jemand von euch mir einen Tipp geben kann, wie man mein Problem möglichst "effektiv" lösen könnte.
Im Idelafall sollten in den Tabellen in den jeweiligen Zellen die alten durch die neuen Werte ersetzt werden.
Ich hoffe, dass ich mein Anliegen halbwegs verständlich rübergebracht habe und mir jemand weiterhelfen kann.
LG
Jana