Einzelnen Beitrag anzeigen
Alt 31.08.2017, 21:58   #11
Oge
MOF Profi
MOF Profi
Standard

Hallo Daniel,

da war ich wohl zu langsam.
Trotzdem möchte ich dir in der Analge meine VBA-Lösung vorstellen. Und hier noch einige Bemerkungen:

A) zu:

Zitat:

Wir könnten den Teilnehmern zwar sagen, dass sie mindestens x Wünsche ankreuzen oder genau x Wünsche, technisch lässt sich das über den Doodle aber nicht sicherstellen. Wenn jeder alle möglichen Termine ankreuzen würde (auch das können wir den TN empfehlen), wäre die Chance auf eine gute Verteilungslösung vermutlich am höchsten, oder?

1) "alle möglichen Termine"
Ich hoffe das heist nicht alle vorhandenen Termine . Dann wäre meine Arbeit ja sinnlos gewesen.

2) Ansonsten ist es jedoch wahrscheinlicher eine gültige Lösung zu finden wenn möglichst viele Teilnehmer möglichst viele Termine akzeptieren.
Eine Empfehlung von möglichst vielen und mindestens x Wünschen ist bestimmt hilfreich.

B) Zur Datei

1) allgemein
Die Datei besteht zur Zeit aus vier verschiedenen Teilen.

2) 1.Teil: Eingabedaten (zur Zeit A2:AE242)
In der ersten Zeile/Spalte erwartet das Programm die Teilnehmer-/Gruppenkennungen.
In allen anderen Zellen erwartet das Programm Nullen und Einsen. Eine Eins steht dabei für "Termin möglich".
Diesem Eingabebereich habe ich den Namen "Liste" gegeben. Das Programm greift auf die Daten unter diesem Namen zu. Die "Liste" kann beliebig in der Datei verschoben werden.
Das Programm ermittelt die Anzahl der Teilnehmer und Gruppen aus der grösse der "Liste" falls mehr Teilnehmer oder Gruppen erforderlich sind, sollten die zusätzlichen Zeilen/Spalten nach der ersten und vor der Letzten Zeile/Spalte der "Liste" eingefügt werden, damit der benannte Bereich automatisch angepasst wird.

3) 2. Teil: Ausgabedaten (zur Zeit AJ2:BN242)
Ich habe einer Zelle der Datei den Namen "Ausgabe" gegeben. Das Programm schreibt die Ausgabedaten (zur Zeit für eine einfachere Prüfung im gleichen Format wie die Eingabedaten nur mit einem Eintrag pro Teilnehmer) ab der Zelle "Ausgabe". Eventuell vorhandene Inhalte in dem Bereich werden gnadenlos überschrieben. Diese Zelle kann beliebig in der Datei positioniert werden (auch in ein anderes Blatt).
Die Ausgabe der Zuordnung Teilnehmer>Gruppe, kann auf Wusch auch ganz anders aufbereitet werden.

4) 3. Teil: Prüffelder (zur Zeit Spalten AF:AI und Zeile 243)
Diese Zellen sind für das Programm nicht notwendig, sie sollten für mich nur die Richtigkeit der Ergebnisse und Testfälle anzeigen.

5) 4. Teil: Erzeugung Testdaten (zur Zeit Zeilen 245:485)
Auch diese Zellen sind für das Programm nicht notwendig. Ich habe hier die Testeinträge erst als Funktion (wie Zelle B245) und dann als Wert zur übernahme in die Eingabedaten eingetragen.

6) Vorraussetzung
Für jeden Teilnehmer muss mindestens Terminwunsch eingetragen werden. Ansonsten endet das Programm nach vielen Versuchen (auf meinem Rechner nach ca 8 Sekunden) auf jeden Fall mit einer Fehlermeldung.

7) Programmablauf
Das Programm ermittelt im ersten Schritt für die Gruppen passende Teilnehmer bis zur Mindestteilnehmerzahl pro Gruppe. Hierbei werden Gruppen mit wenigen Teilnehmerwünschen und innerhalb der Gruppen Teilnehmer mit wenig Gruppenwünschen vorrangig behandelt. Falls bei hierbei festgestellt wird, dass für eine noch nicht bearbeitete Gruppe nicht mehr genügend mögliche Teilnehmer vorhanden sind wird diese Gruppe nicht mehr berücksichtigt.
Im zweiten Schritt werden die noch nicht zugeordneten Teilnehmer auf die Gruppen, in denen noch Platz ist aufgeteilt.
In beiden Schritten gibt es bei der Auswahl der Teilnehmer und Gruppen einen Zufallsprozess. Falls das Programm merkt, dass das Problem mit der aktuellen Auswahl nicht mehr lösbar ist, wird der Prozess für den aktuellen Schritt neu gestartet.

8) Anpassungen
Falls das Programm für die aktuellen Eingabedaten bei mehrmaligen Versuchen (durch den Zufallsprozess könnte ein späterer Versuch ein Lösung erzeugen) keine Lösung findet und die Eingabedaten nicht mehr abgeändert werden können, könnte man im Programm die Mindestteilnehmerzahl pro Gruppe reduzieren oder die maximale Teilnehmerzahl pro Gruppe erhöhen. Sie sind zu Beginn als Konstante (Deklaration "const") festgelegt.
Angehängte Dateien
Dateityp: xlsm Teilnehmerverteilung.xlsm (123,7 KB, 28x aufgerufen)

__________________

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.
Oge ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten