Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zahlen 1-100 gleichmäßig auf Gruppen verteilen

Zahlen 1-100 gleichmäßig auf Gruppen verteilen
25.10.2016 22:57:15
Sev
Hallo,
ich möchte die Zahlen von 1-100 nach einem bestimmten Schlüssel, aber gleichmäßig auf 5 Gruppen verteilen, zB
Gruppe 1: 8 Zahlen
Gruppe 2: 10 Zahlen
Gruppe 3: 51 Zahlen
Gruppe 4: 12 Zahlen
Gruppe 5: 20 Zahlen
Gleichmäßig meint dabei, dass nicht Gruppe 1 die Zahlen 1-15, dann Gruppe 2 16-21 usw erhält, sondern die Zahlen von 1-100 quasi reihum verteilt werden. Grundsätzlich sollte für eine Gruppe immer der größtmögliche Abstand zwischen zwei zugewiesenen Zahlen genutzt werden. Beispiel: Gruppe 2 mit 10 Zahlen - idealerweise 1, 11, 21, 31 usw. Praktisch (per Hand) führt das aber irgendwann zu Kollisionen mit anderen Gruppen. Ich habe ein VBA-Modul, dass mir kollisionsfrei für die Gruppen (irgendwelche) Zahlen zwischen 1-100 ausgibt, aber dabei kann es sein, dass eine Gruppe vier aufeinanderfolgende Zahlen erhält. Genau das will ich vermeiden. Auf das Makro habe ich gerade keinen Zugriff, dass poste ich morgen noch einmal.
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zahlen 1-100 gleichmäßig auf Gruppen verteilen
26.10.2016 11:02:28
Sev
Hier das Makro:
Sub verteilen_neu()
Dim BereichVerteilung As Range
Dim Verteilung
Dim VerteilungIst
Dim VerteilungSoll
Dim VertGes As Integer
Dim AnzahlVerteilt As Integer
Dim AnzahlAkten As Integer
Dim i As Integer
Dim Obergrenze As Integer
Dim Untergrenze As Integer
Set BereichVerteilung = Range("A2:F2") 'Der Bereich in dem der Verteilungsschlüssel steht.
'In der nächsten Reihe wird die Anzahl der zu verteilenden Akten eingetragen
BereichVerteilung.Offset(3).Resize(500, BereichVerteilung.Columns.Count).ClearContents
Verteilung = BereichVerteilung
Verteilung = WorksheetFunction.Transpose(Verteilung)
Verteilung = WorksheetFunction.Transpose(Verteilung)
VertGes = WorksheetFunction.Sum(BereichVerteilung)
For i = LBound(Verteilung) To UBound(Verteilung)
Verteilung(i) = Verteilung(i) / VertGes
Next
VerteilungIst = BereichVerteilung.Offset(1, 0)
VerteilungIst = WorksheetFunction.Transpose(VerteilungIst)
VerteilungIst = WorksheetFunction.Transpose(VerteilungIst)
VerteilungSoll = Verteilung
Untergrenze = InputBox("verteilen von: ")
Obergrenze = InputBox("verteilen bis: ")
AnzahlAkten = Obergrenze - Untergrenze + 1
AnzahlVerteilt = WorksheetFunction.Sum(BereichVerteilung.Offset(1, 0))
VertGes = AnzahlAkten + AnzahlVerteilt
For i = LBound(Verteilung) To UBound(Verteilung)
VerteilungSoll(i) = Verteilung(i) * VertGes
Verteilung(i) = Verteilung(i) * AnzahlAkten
Next
Dim sz As String
Dim zz As Integer
Dim zuVerteilen As Integer
Dim letzteZeile As Long
Dim PlatzGefunden As Boolean
sz = ""
zuVerteilen = AnzahlAkten
Do
Do
zz = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
Loop While InStr(1, sz, "#" & zz & "#") > 0
sz = sz & "#" & zz & "#"
i = 1
PlatzGefunden = False
Do
If Verteilung(i) >= 1 Then 'so lang eine normale Verteilung möglich ist wird normal  _
verteilt
letzteZeile = BereichVerteilung.Cells(i).Offset(500).End(xlUp).Row + 1
If letzteZeile  UBound(Verteilung) And Not PlatzGefunden Then 'ist eine Verteilung nicht mö _
glich wird der erste mit der größten differenz zum soll belastet.
Dim mI As Integer, Max As Double
Max = VerteilungSoll(1) - VerteilungIst(1)
mI = 1
For i = 2 To UBound(VerteilungSoll)
If Max  0
BereichVerteilung.Offset(1) = VerteilungIst
End Sub

Anzeige
AW: Zahlen 1-100 gleichmäßig auf Gruppen verteilen
26.10.2016 14:55:00
Michael
Hi,
die Gruppe 3 solltest Du als erstes bearbeiten - aber sag, wie willst Du 51 Zahlen auf 1-100 verteilen, ohne daß 2 nebeneinander liegen? 51 ungerade Zahlen gingen bis 101, gerade bis 102.
Gruß,
M.
AW: Zahlen 1-100 gleichmäßig auf Gruppen verteilen
26.10.2016 16:14:07
Sev
Insoweit war meine Frage unklar - die Zahlen sollen nicht benachbart sein, soweit das möglich ist. Ja, ich gehe auch davon aus, dass ich zunächst der Gruppe mit dem größten Anteil aus dem freien Bereich "deren" Zahlen zuteile und dann aus dem dann noch freien Bereich die anderen Gruppen bediene. Es geht aber - ganz praktisch - um die Verteilung von Arbeit anhand von chronologisch eingehenden Aufträgen ("Akten"). Wenn ich die Gruppe 3 zuerst bediene, könnte ich zB jede 2 Ziffer (sagen wir: jede ungerade) plus eine Folgeziffer der Gruppe zuteilen. Dann habe ich für alle anderen Gruppen noch 49 gerade Ziffern zwischen 1-100.
Es wäre aber nicht sinnvoll, der Gruppe 3 mit 8 Ziffern zB die Folge "2, 4, 6, 8, 12, 16, 18, 20" zuzuteilen, weil diese dann in einem kurzen Zeitraum - dem Eingang von 20 Akten - bereits die Arbeit zugeteilt bekommt, die sie insgesamt auf einen Eingang von 100 Akten erledigen soll, weil dann erst Überlast und dann Leerlauf herrscht.
Deswegen denke ich, dass man für jede Gruppe den optimalen Abstand der zugewiesenen Zahlen errechnen muss - also zB bei 20 aus 100 jede 5, bei 8 aus 100 jede 12,5 usw. und dann prüfen, ob mit den noch freien Zahlen diese optimalen Abstände bedient werden können. Und wenn dies nicht der Fall ist, weil eine bestimmte Zahl für zwei Gruppen der jeweils "optimale" Abstand wäre, müsste es eine Möglichkeit geben, die Kollision zu entscheiden - also zB Vorrang für die Gruppe, die mehr Zahlen zugewiesen bekommen soll.
Danke für die Beteiligung.
Anzeige
Zahlen 1-100 gleichmäßig auf Gruppen verteilen
27.10.2016 16:36:03
Michael
Hi,
anbei eine allg. und eine spezielle Annäherung an das Problem: https://www.herber.de/bbs/user/109062.xlsm
Die Idee ist, die Zahlen erst mal auf einen "gespreizten" Bereich zu verteilen (da gibt es weniger Gerangel um eine bestimmte Position) und diesen dann wieder einzudampfen.
Die allg. Version ist sehr variabel; Kernstück ist eigentlich nur ein bestimmter Bereich, der eingelesen wird. Bei der Gruppe 3 sind aber doch einige Aufträge auf nacheinanderfolgende Zahlen verteilt.
Die spezielle Version verteilt besser, setzt aber voraus, daß 51 immer 51 ist.
Schöne Grüße,
Michael
Schöne Grüße,
Michael
Anzeige
AW: Zahlen 1-100 gleichmäßig auf Gruppen verteilen
27.10.2016 19:29:26
Sev
Vielen Dank! Ich teste das morgen!
AW: Zahlen 1-100 gleichmäßig auf Gruppen verteilen
31.10.2016 16:29:40
Sev
So,
ich bin jetzt endlich mal zum Testen gekommen und bedanke ich mich nochmals ganz herzlich. Ich benötige die "allg"-Version, weil sich die Anteile über das Jahr stetig verändern. Mit der geringen Anzahl direkter "Folgeaufträge" kann ich leben bzw. diese manuell justieren.
:thumbsup:
Anzeige
very nice, danke für die Rückmeldung
31.10.2016 18:05:43
Michael
und schöne Grüße,
Michael

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Zahlen von 1-100 gleichmäßig auf Gruppen verteilen


Schritt-für-Schritt-Anleitung

  1. Zahlenbereich festlegen: Erstelle eine Liste der Zahlen von 1 bis 100 in Excel. Du kannst dies schnell tun, indem Du in Zelle A1 die Zahl 1 eingibst und dann den Griff in der unteren rechten Ecke der Zelle bis zu Zelle A100 ziehst.

  2. Gruppeneinteilung festlegen: Entscheide, wie viele Gruppen Du benötigst und wie viele Werte jede Gruppe enthalten soll. Beispiel: Gruppe 1: 8 Zahlen, Gruppe 2: 10 Zahlen, usw.

  3. Makro erstellen: Nutze folgendes VBA-Skript, um die Zahlen gleichmäßig auf die Gruppen zu verteilen:

    Sub verteilen_neu()
       Dim BereichVerteilung As Range
       Dim Verteilung
       Dim i As Integer
       Set BereichVerteilung = Range("A2:F2") ' Bereich für Verteilungsschlüssel
       ' Hier folgt der restliche Code aus dem Thread
    End Sub
  4. Verteilung anpassen: Achte darauf, dass die zugewiesenen Zahlen nicht benachbart sind. Du kannst die Zuweisung manuell anpassen, um sicherzustellen, dass die Zahlen den optimalen Abstand haben.

  5. Überprüfung: Überprüfe, ob die Verteilung den gewünschten Anforderungen entspricht. Du kannst dies tun, indem Du die Gruppen und deren Zahlen in einer Tabelle darstellst.


Häufige Fehler und Lösungen

  • Fehler: Zahlen sind benachbart.

    • Lösung: Stelle sicher, dass der Abstand zwischen den Zuweisungen groß genug ist. Beispielsweise kannst Du die Zuweisung so gestalten, dass Du jede zweite oder dritte Zahl verwendest.
  • Fehler: VBA-Code funktioniert nicht.

    • Lösung: Überprüfe, ob Du die Makros in Excel aktiviert hast und dass der Code korrekt eingegeben wurde.

Alternative Methoden

Eine alternative Methode besteht darin, die Excel-Funktion RANDBETWEEN() zu verwenden, um zufällige Zahlen zu generieren und diese dann manuell zu sortieren. Du kannst die Funktion so verwenden:

=RANDBETWEEN(1, 100)

Verwende diese Funktion in einer Zelle und ziehe den Griff, um die Funktion auf mehrere Zellen anzuwenden. Anschließend kannst Du die Zahlen in Gruppen einteilen.


Praktische Beispiele

  • Beispiel 1: Du möchtest 5 Gruppen mit den folgenden Zahlenverteilungen: Gruppe 1: 8 Zahlen, Gruppe 2: 10 Zahlen, Gruppe 3: 51 Zahlen, Gruppe 4: 12 Zahlen und Gruppe 5: 20 Zahlen. Stelle sicher, dass die Zuweisung so erfolgt, dass die Abstände maximiert werden.

  • Beispiel 2: Du kannst eine Zufallszahl zwischen 1 und 100 generieren, indem Du die Funktion RANDBETWEEN() verwendest, und dann die generierten Zahlen gleichmäßig auf die Gruppen verteilen.


Tipps für Profis

  • Nutzung von Excel-Tabellen: Verwende Excel-Tabellen, um Deine Daten dynamisch zu verwalten. Damit kannst Du die Daten einfacher sortieren und filtern.

  • Datenvalidierung: Setze Datenvalidierungsregeln ein, um sicherzustellen, dass nur die gewünschten Zahlen in die Gruppen eingeteilt werden.

  • Visualisierung: Nutze Diagramme, um die Verteilung der Zahlen in den Gruppen visuell darzustellen. Dies kann helfen, Muster oder Ungleichgewichte schneller zu erkennen.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die zugewiesenen Zahlen in Excel gleichmäßig verteilt sind?
Verwende ein VBA-Skript oder die RANDBETWEEN()-Funktion und achte darauf, dass die Zuweisung der Zahlen einen ausreichenden Abstand zwischen den einzelnen Werten gewährleistet.

2. Was mache ich, wenn ich die Gruppen dynamisch anpassen möchte?
Nutze die allgemeine Version des bereitgestellten Makros, um die Verteilung der Zahlen flexibel zu gestalten. So kannst Du die Anteile jederzeit ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige