Hallo Hans,
erst einmal die Beantwortung deiner beiden Fragen.
1) Ja
2) Nein
Jetzt ein wenig zur Nutzung der Makros damit du die Datei nach deinen Bedürfnissen erweitern kannst.
Ein Excel-Makro muss im Normalfall mit Excel-Tabellen kommunizuieren. (Es muss aus der Excel-Oberfläche aufgerufen werden, Daten aus Tabellen Lesen und Daten in Tabellen schreiben.)
a )
Aufruf (wahrscheinlich nicht wichtig, aber zur Vollständigkeit)
Der Aufruf meiner Makros erfolgt über den
Command
Button (das Steuerelement) "
cbLoesen" mit der Aufschrift "lösen".
Steuerelemente und ihre EreignisMakros sind in Excel sehr stark an die Tabellenblätter gebunden (im Beispiel "Tabelle1").
Solltest du das Makro über ein Button in einem anderen Tabellenblatt aufrufen wollen, könntest du in diesem Tabellenblatt einen CommandButton mit dem Namen "cbLoesen" erstellen und im VBA Editor alle Zeilen aus dem Modul zur Tabelle1 in das Modul des neuen Tabellenblattes verschieben.
Den Namen des Tabellenblattes "Tabelle1" oder die Aufschrift "lösen" kannst du aber ohne weiteres ändern.
b)
Daten lesen, Daten schreibenHierfür benötigt das Makro die Information in welchem Blatt und an welcher Position des Blattes es die Daten lesen oder schreiben soll.
Man kann in einem Makro diese Position fest eintragen. Der Nachteil hierbei ist, dass man diese Position im Makro immer wieder anpassen muss, sobald sich durch Änderungen in den Tabellenbättern die Position dieser Daten ändert.
Ich bevorzuge ,wie schon geschrieben, den Austausch der Positionen zwischen Makro und Tabellen über Namen. Man kann die benannten Bereiche innerhalb der Exceldatei verschieben (Ausschneiden und wieder einfügen -auch in unterschiedliche Tabellenblätter-) ohne die Makros anpassen zu müssen.
In Exceldateien kann man einzelnen Zellen und auch Zellbereichen einen Namen geben. Wenn man eine Zelle oder einen Zellbereich markiert, die einen Namen hat, erscheint im linken Feld der Bearbeitungszeile anstatt der Position dieser Name (zB. "Minimum" statt B8 im Anhang).
Für mein Makro benötige ich vier benannte Bereiche.
Zum Einlesen den Bereich "
Auftraege" (im Beispiel B1:M2) und die Zellen "
Minimum" (im Beispiel B8) und "
Maximum" (im Beispiel C8).
Zur Ausgabe die Zelle "
Ausgabe" (im Beispiel B15)
1) "Minimum" und "Maximum"
Wie schon geschrieben kannst du diese benannten Zellen an belibige Positionen innerhalb dieser Exceldatei positionieren ohne die Makros ändern zu müssen.
2) "Auftraege"
Auch dieser Bereich kann an eine beliebige Position innerhalb dieser Exceldatei verschoben werden. Da es sich aber um einen Bereich handelt, muss man aufpassen, dass er als Ganzes verschoben wird.
Das Makro erwartet für diesen Bereich immer mindestens zwei Zeilen. In der ersten Zeile die Auftragsnummer und in der zweiten Zeile die Tage für diesen Auftrag.
Wenn man die Anzahl der Aufträge erhöhen will, muss man zwischen der ersten und letzten Spalte des benannten Berreichens entsprechend viele Spalten einfügen. (Hierdurch erweitert sich der benannte Bereich)
Wenn man die Anzahl der Aufträge reduzieren will, muss man zwischen der ersten und letzten Spalte des benannten Berreichens entsprechend viele Spalten löschen (leeren reicht nicht).
3) "Ausgabe"
Das ist die Startposition für die Ausgabe. Auch diese Zelle kann an eine beliebige Position innerhalb dieser Exceldatei verschoben werden.
In dieser und den folgenden 2 Spalten und in dieser und den folgenden N Zeilen werden die möglichen Kombinationen geschrieben. (Da Gast geschrieben hat, dass mein Makros mehr mögliche Kombinationen ermittelt hat, möchte ich darauf hinweisen, dass das Makro -durch den Algorithmus bedingt-
alle möglichen Kombinationen ermittelt.)
Achtung! Bevor die Ergebnisse der neuen Berechnung eingetragen werden, werden die Ergebnisse der letzten Berechnung gelöscht (Alle gefüllten Zellen direkt unter dieser Zelle und die nächsten zwei Spalten).
c)
LaufzeitWie schon in der letzten Antwort geschrieben, ist die Laufzeit des Makros
- sehr sehr stark abhängig von der Anzahl der Aufträge
- auch abhängig von der Grösse des Bereiches (Maximum - Minimum) und der Grösse der Aufträge
- und ein wenig abhängig von der Anordnung der Projekte nach Anzahl der Tage.
Du solltest die Anzahl der Aufträge nicht auf einmal sehr stark erhöhen, sondern die Erhöhung schrittweise durchführen um zu erkennen ob du mit der neuen Laufzeit leben kannst. (Auf meinen Rechner blieb die Rechenzeit bei 48 Aufträgen, aber einem relativ kleinen Zeitbereich weit unter einer Minute.)
d)
AbbruchDas Makro ist nicht Fehlertolerant geschrieben. Folgende Abbrüche mit einer Systemmeldung, die eventuell nicht von jedem verstanden werden, sind zum Beispiel möglich:
- Ein benötigter Name ist in dieser Datei nicht mehr vorhanden.
- Ein Eingabefeld enthält keine ganze Zahl.
- Der Bereich "Auftraege hat weniger als zwei Zeilen.
- Falls mehr Kombinationen ermittelt werden als eine Exceltabelle Zeilen haben darf, wird das Programm abgebrochen, wenn die letzte Zeile beschrieben wurde.