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.

Zahlen in Gruppen gleichmäßig aufteilen
#1
Hallo,

folgendes Problem: Habe 200 Werte und möchte diese gerne auf 4er Gruppen aufteilen. Dabei soll die Summe jeder Gruppe ungefähr gleich sein - Wenn möglich die optimale Lösung...
Wobei jede Gruppe muss 4 Werte enthalten!
Hat jemand eine Ahnung wie ich das machen kann? (ich möchte natürlich immer die 4 Zahlen wissen, die er zusammenfügt...)

Danke,
LG Nemo
Antworten Top
#2
Verlinkst du bitte deine Beiträge in unterschiedlichen Foren untereinander?
Schließlich gibt es im Nachbarforum schon eine Antwort.
Und die meisten Helfer mögen kein Crossposting ohne Querverweis.
Beste Grüße
  Günther

Excel-ist-sexy.de
  …schau doch mal rein!
Der Sicherheit meiner Daten wegen lade ich keine *.xlsm bzw. *.xlsb- Files mehr herunter! -> So geht's ohne!
Antworten Top
#3
(02.11.2017, 11:43)Nemo1983 schrieb: Hallo,

folgendes Problem: Habe 200 Werte und möchte diese gerne auf 4er Gruppen aufteilen. Dabei soll die Summe jeder Gruppe ungefähr gleich sein - Wenn möglich die optimale Lösung...
Wobei jede Gruppe muss 4 Werte enthalten!
Hat jemand eine Ahnung wie ich das machen kann? (ich möchte natürlich immer die 4 Zahlen wissen, die er zusammenfügt...)
http://www.office-fragen.de/index.php/to...975.0.html
habe auch schon in einem anderen Forum um eine Lösung ersucht, aber bis jetzt keine gefunden.... Undecided

Danke,
LG Nemo
Antworten Top
#4
Hallo,

mit der Formel von Lupo kam ich nicht zurecht.

Hier ein halb-manueller Ansatz, der vermutlich nicht das Optimum liefert, aber einige Schritte dahin.

Der Makro muss von Hand wiederholt ausgeführt werden, bis es in Spalte L keine Verbesserung mehr gibt.


Code:
Sub iStart()
With Range("A1:D50")
   .Formula = "=int(rand()*1000)"
   .Value = .Value
End With
Range("F1:F50").Formula = "=sum(RC[-5]:RC[-2])"
Range("H1") = "min"
Range("H2") = "max"
Range("I1").Formula = "=min(F1:F50)"
Range("I2").Formula = "=max(F1:F50)"
Range("J1").Formula = "=match(I1,F1:F50,0)"
Range("J2").Formula = "=match(I2,F1:F50,0)"
End Sub


Sub iFen()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim RMin As Range
Dim RMax As Range
lr = Cells(Rows.Count, "L").End(xlUp).Row + 1
Cells(lr, "L") = Cells(2, "I") - Cells(1, "I")
Mn = Range("J1")
Mx = Range("J2")
Set RMin = Range(Cells(Mn, 1), Cells(Mn, 4))
Set RMax = Range(Cells(Mx, 1), Cells(Mx, 4))
Mi = WSF.Min(RMin)
Ma = WSF.Max(RMax)
Cl = WSF.Match(Mi, RMin, 0)
Ch = WSF.Match(Ma, RMax, 0)

Cells(Mn, Cl) = Ma
Cells(Mx, Ch) = Mi

End Sub


mfg
Antworten Top
#5
Hallo,

also habe das versucht und es klappt nicht wirklich - siehe Anhang...
es müsste die erste Gruppe eigentlich: 272,1,1,1 sein und dann weiter... klappt leider nicht, aber danke für den Versuch! Wink


Angehängte Dateien
.xlsx   Test2.xlsx (Größe: 10,14 KB / Downloads: 8)
Antworten Top
#6
(02.11.2017, 14:01)Fennek schrieb: mit der Formel von Lupo kam ich nicht zurecht.
Vermutlich, weil Du die Einschränkungen nicht gelesen hast.
Mit einer Zahlenreihe 1 bis 200 klappt es punktgenau; die Summe ist immer (50 Mal) 402. Je mehr man von so einer Gleichverteilung der Zahlen wegkommt, desto dringender werden andere Lösungen.
Antworten Top
#7
nur leider funktioniert es mit meinen Zahlen nicht, jemand einen Plan wie ich das mit meinen Werten umsetzen kann?
Antworten Top
#8
Hallo,

noch ein Versuch (hoffentlich nicht zu nahe an Lupos Vorschlag)


Code:
Sub Start2()
With Range("A1:A200")
   .Formula = "=int(rand()*1000)+1"
   .Value = .Value
   .Offset(, 10).Formula = "=sum(rc[-5]:rc[-2])"
End With
End Sub

Sub iFen2()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim RMin As Range
Dim RMax As Range
Dim r As Range
Set r = Range("A1:A200")
For i = 1 To 100 Step 2
   Z = Z + 1
   Cells(Z, 6) = WSF.Large(r, i)
   Cells(Z, 7) = WSF.Large(r, i + 1)
   Cells(Z, 8) = WSF.Small(r, i)
   Cells(Z, 9) = WSF.Small(r, i + 1)
Next i
Debug.Print Mi, Mir
End Sub


mfg
Antworten Top
#9
Hier gab es mal ein ähnliches Problem.
Du müsstest den Greedy-Algorithmus quasi zweimal anwenden.
Antworten Top
#10
Hallo,

ohne den link von Storax zu kennen:

Der Code erzeugt Paare, die sehr nahe am Sollwert sind, die Kombination zweier dieser Paare sollte der optimalen Lösung nahe kommen.


Code:
Sub Start2()
With Range("A1:A200")
   .Formula = "=int(rand()*1000)+1"
   .Value = .Value
   .Copy Cells(1, 3)
   .Offset(, 10).Formula = "=sum(rc[-5]:rc[-2])"
End With
End Sub


Sub iFen4()
Dim WSF As WorksheetFunction: Set WSF = Application.WorksheetFunction
Dim Bo As Boolean: Bo = True
Dim Ziel As Integer
Ziel = WSF.Sum(Range("C1:C200")) / 100

Do While Bo
   i = i + 1
   If Not IsEmpty(Cells(i, 3)) Then
       Top = 1000
       For j = i + 1 To 200
       If Not IsEmpty(Cells(j, 3)) Then
           If Abs(Cells(i, 3) + Cells(j, 3) - Ziel) < Top Then
               Top = Abs(Cells(i, 3) + Cells(j, 3) - Ziel)
               jj = j
           End If
       End If
       Next j
       r = r + 1
       Cells(r, 6) = Cells(i, 3)
       Cells(r, 7) = Cells(jj, 3)
       Cells(jj, 3).Clear
   End If
   If i > 100 Then Bo = False
Loop
End Sub


mfg
Antworten Top


Gehe zu:


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