Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zahlenkombinationen ausrechnen die einen gewünschten Gesamtwert nicht überschreiten
#1
Hallo zusammen,

ich bin neu hier und wende mich mit einer Frage an euch die ich mit meinen excel-Kenntnissen nicht lösen kann. Wenn es dafür eine einfache Funktion gibt weiß ich nicht wie die heißen könnte und auch nicht wirklich wonach ich im Forum suchen sollte.

Ich habe eine Liste mit 12 Aufträgen (Zeile 1, Nummern 1-13, die 7 fehlt, das hat einen Grund könnte ich aber auch umformulieren damit keine Lücke in der Zahlenfolge ist), in Zeile 2 habe ich für jeden Auftrag die von uns geschätzte Anzahl der Arbeitstage eingetragen die wir für diesen Auftrag brauchen würden. Dazu hätte ich jetzt gerne alle Kombinationen von Aufträgen die zusammen zwischen 300-350 Arbeitstagen (Zeile 8) in Anspruch nehmen würden. Für die möglichen Kombinationen habe ich ab Zeile 15 eine Tabelle erstellt, und in Zeile 15 ein Beispiel einer möglichen Kombination reingeschrieben.

Jetzt die Frage an euch, gibt es eine Funktion die mir die erwünschte Information in irgendeiner Form ausgeben kann. Die Formatierung muß nicht so sein wie in meinem Beispiel in Zeile 15, ich brauche nur die möglichen Kombinationen. Ich habe die Datei angehängt, da seht ihr was ich meine. Bei weiteren Fragen gerne melden.

Vielen Dank, schonmal.

Hans


Angehängte Dateien
.xlsx   Arbeitstage.xlsx (Größe: 11,2 KB / Downloads: 12)
Antworten Top
#2
Hi Hans,

(14.12.2016, 17:13)hans_meiser schrieb: Wenn es dafür eine einfache Funktion gibt weiß ich nicht wie die heißen könnte und auch nicht wirklich wonach ich im Forum suchen sollte.

Du könntest im Forum mal nach "Kombinatorik" suchen, da gibt es viele Treffer.

Das hier könnte passen:
http://www.clever-excel-forum.de/thread-...k#pid47673

Natürlich muß das noch angepasst werden.
Antworten Top
#3
Hallo Rabe,

Danke für den Hinweis mit der Kombinatorik. Der link zu dem anderen Thread geht schon in die richtige Richtung, aber ich verstehe zu wenig von excel um das für meine Bedürfnisse weiterzuentwickeln. Vielleicht kann noch jemand weiterhelfen.

Viele Grüße,
Hans
Antworten Top
#4
Hallo Hans

ich habe mir das Beispiel geladen und sehe, das ist eine schwierige Aufgabe. Da fehlt mir mathematisches Wissen. Ich schaue mal als alter Praktiker ob mir dazu was einfaellt, brauche aber 1-2 Tage Zeit. Solche Lösungen gibt es nicht in fünf Minuten. Verpsrechen kann ich nichts, schauen wir mal was dabei rauskommt. Melde mich wieder.

mfg  Gast 123
Antworten Top
#5
Hallo Hans

es hat etwas gedauert, habe viel ausprobiert, jetzt gibt es eine Beispieldatei. Ich hoffe es klappt einwandfrei!  Resultat:  78 Kombinationen!

Ich habe mehrere Makros geschrieben und die Aufgabe in Teillösungen zerlegt. Zuerst werte ich die zweistelligen Tage aus, dann kombiniert, zwei- und dreistellig, und zum Schluss die dreistelligen. Das erste Ergebnis hat nicht die Auftrags Reihenfolge, sondern die Tage, sortiert von klein nach gross. Ein zweites Makrı stellt die Reihenfolge dann wieder um.

Ich hoffe das Programm ist Praxisgerecht. Ich brauche aber drei Hilfssplaten, hoffe das stört nicht. Weil ich die Tage logisch auswerte habe ich sie in den Hilfsspalten aufsteigend sortiert. Sonst war die Aufgabe nicht lösbar. Ich bin auf deine Rückmeldung gespannt.

mfg  Gast 123


Angehängte Dateien
.xlsm   Arbeitstage F.xlsm (Größe: 37,55 KB / Downloads: 10)
Antworten Top
#6
Hallo Hans, hallo Gast,

@ Gast

Ich habe in deiner Berechnung einige gültige Kombinationen vermisst (z.B. 4,5,12). Da ich die Aufteilung in Teillösungen nicht verstanden habe, habe ich einmal selbst ein Makro geschrieben und komme mit den Beispieldaten auf 249 gültige Kombinationen.
Ich halte ein recursives Programm in diesem Beispiel für passender und einfacher zu programmieren.

@ Hans

1) Das Problem ist meines Erachtens mit Excel-Funktionen nicht lösbar sondern man benötigt VBA-Programme. Ist dies für dich akzeptabel?

2) Die Anzahl der möglichen Kombinationen bei N Aufträgen ist grösser als N! Die Laufzeit des Programmes explodiert alsó wenn die Anzahl der Aufträge erhöht wird.

3) Man kann die Laufzeit meines Programmes ein wenig kürzen, wenn die Aufträge nach Arbeitstagen absteigend vorgegeben werden, da dann mehr Verzweigungen (wenn das Maximum überschritten ist) abgeschnitten werden.

4) Da ich ungern mit festen Adressen in den Programmen arbeite, habe ich in dem Beispiel vier benannte Bereiche eingetragen. Auf Wunsch kann ich das noch erläutern.


Angehängte Dateien
.xlsm   Arbeitstage F.xlsm (Größe: 55,46 KB / Downloads: 7)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#7
Hallo Helmut,

Hut ab, alle Achtung, dein Makro ist um Klassen besser.  Freut mich für Hans.
Mir fehlte im Augenblick der Durchblick wie man die Aufgabe lösen nkönnte, so entwickelte ich drei Makros.
Ich nenne das schicht eine "Notlösung", bevor es garkeinen Vorschlag oder eine gute Lösung gibt

Jetzt gibt es deinen Lösungsvorschlag mit mehr Kombinationen. Eindeutig besser! Ich hoffe es gefaellt Hans .

mfg  Gast 123
Antworten Top
#8
Hallo Gast 123, Hallo Ego,

ich habe hier seit einiger Zeit nicht mehr reingeschaut. Das ist ja große Klasse!!! Vielen Dank euch beiden für eure Mühe!

EGO: an dich hätte ich noch folgende Fragen da ich mich mit Makros überhaupt nicht auskenne:

Sehe ich es richtig das wenn ich bei den 12 Projekten in der Zeile 2 Zahlenwerte ändere oder in Zeile 8 die Kapazität ändere sich automatisch die neuen Kombinationen ausrechnen lassen indem ich auf lösen klicke?
Was wäre wenn ich mal mehr als 12 Projekte hätte, z.B. 15, müsste ich das makro dafür anpassen?

Viele Grüße und vielen Dank nochmal für die tolle Arbeit!
Hans
Antworten Top
#9
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 CommandButton (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 schreiben
Hierfü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) Laufzeit
Wie 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) Abbruch
Das 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.


Angehängte Dateien
.xlsm   Arbeitstage F-9.xlsm (Größe: 39,61 KB / Downloads: 5)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • hans_meiser
Antworten Top
#10
Hallo Ego,

vielen Dank für die ausführliche und strukturierte Erläuterung, jetzt kann ja nichts mehr schief gehen. Ich werde dieses makro bei Gelegenheit vielleicht dazu benutzen um Makros allgemein zu verstehen um vielleicht in Zukunft auch selber eins machen zu können. Vielleicht ergibt sich da noch die eine oder andere Frage. Aber erstmal bin ich wunschlos glücklich!!

Viele Grüße,
Hans
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste