Profi-Frage: Alle Kombinationen in Excel anzeigen lassen?

6 Antworten

Das sind ca. 400 Milliarden Kombinationen (wenn die Reihenfolge egal ist; andernfalls wären es noch mehr).

In Excel kannst du die nicht alle anzeigen, da ein Excel-Arbeitsblatt maximal ca. 1 Million Zeilen und 16.384 Spalten haben kann.

Spieler7793 
Fragesteller
 31.08.2020, 00:18

Danke erstmal, glaube aber du hast dich verrechnet - Ja die Reihenfolge ist egal, wichtig ist nur, dass es 10er Kombinationen sind. Es sollten ca. 2 Mio Kombinationen sein und in 2-3 Excel-Blätter passen :)

1
ultrarunner  31.08.2020, 00:21
@Spieler7793

Naja, 70 über 10 ist auch nach neuerlicher Überprüfung immer noch:

3,97 · 10¹¹, also 397 Milliarden.

2
TinaAusWien  31.08.2020, 10:13
@ultrarunner

Ich hatte es so verstanden, dass der Fragensteller nicht nach dem Ergebnis des Binomialkoeffizenten, sondern einfach nach 70^10 fragt.

Naja, auf jeden Fall ist es viel zu viel, um realistisch betrachtet auch nur annähernd von Excel bearbeitet zu werden. .)

0

Nimm die Antwort von daCypher
und schreibe die Dinge in eine Datei. oder eher mehrere, damit es keine so große datei gibt, die wiederum kein geeigneter Editor öffnen kann.
Wie unten bereits erwähnt passen ~17Mrd auf ein Blatt. Da man mehrere Blätter haben kann ist dies auch in Excel möglich, aber nicht sinnvoll.
Schreibe einfach mal nur ne "1" in jede Zelle. Bereits ~100MByte große Datei.
Vielleicht gibt es ne bessere Lösung, wenn wir den Anwendungsfall hinter dieser Frage kennen würden.
Abgeleitet vom Lotto, was bereits statistisch auch mit Hilfsprogrammen beliebig beleuchtet ist kannst du etwas für deinen Fall finden.

Das kann mit Excel nicht gehen. Vergiss es einfach!

Es sind übrigens nicht 400 Mrd. mögliche Kombinationen, wie in der anderen Antwort erwähnt, sondern fast 3 Trilliarden.

Die Hardware deines Rechners reicht nicht mal für 0,001% davon aus.

Das wird so also nix! :)

Woher ich das weiß:Berufserfahrung
hannes1806  31.08.2020, 14:51

Es sind laut meiner Rechnung 70x69x68x67x66x65x64x63x62x61=1.439.561.377.475.020.800 Möglichkeiten

0
TinaAusWien  31.08.2020, 17:25
@hannes1806

Ach so, ich dachte Doubletten sind akzeptabel. Na dann hast du natürlich recht!

1

Ich habs mal so gebaut, dass es etwas anpassungsfähiger ist. Du musst vorher in der Zelle A1 die kleinste Zahl, in der Zelle B1 die größte Zahl und in der Zelle C1 die Größe der Kombination schreiben. Also in diesem Fall A1 = 1, B1 = 70, C1 = 10

Dann das Makro starten und ein paar Tage warten. Ist übrigens das erste mal, dass ich eine sinnvolle Verwendung für eine rekursive Funktion gefunden hab.

Option Explicit


Public Sub combinations()
Dim min As Integer
Dim max As Integer
Dim count As Integer


min = [A1]
max = [B1]
count = [C1]


If min < max And count <= max - min + 1 Then
    ReDim values(count - 1) As Integer  ' array containing the current values to be printed
    Dim i As Integer                ' index variable for loops
    Dim curCell As Range            ' cell to be printed into
    Dim maxValue                    ' max value for current array cell
    
    ' Initialize values array
    For i = 0 To count - 1
        values(i) = min + i
    Next i
    
    ' Iteration over all cells in current worksheet
    For Each curCell In Cells
        ' store current values
        curCell.Value = intJoin(values)
        
        ' calculate next values
        If getNextCombination(values, count - 1, max) = False Then
            Exit Sub
        End If
    Next curCell
End If
End Sub


Private Function intJoin(values() As Integer) As String
Dim i As Integer
Dim result As String


For i = LBound(values) To UBound(values)
    result = result & ", " & values(i)
Next i


intJoin = Mid(result, 3)
End Function




Private Function getNextCombination(ByRef values() As Integer, curIndex As Integer, maxValue As Integer) As Boolean
    If values(curIndex) < maxValue Then
        values(curIndex) = values(curIndex) + 1
        getNextCombination = True
        Exit Function
    ElseIf curIndex = 0 Then
        getNextCombination = False
    Else
        If getNextCombination(values, curIndex - 1, maxValue - 1) = True Then
            values(curIndex) = values(curIndex - 1) + 1
            getNextCombination = True
        Else
            getNextCombination = False
        End If
    End If
End Function

Da hilft nur eine 10 Fach verschachtelte Forschleife

Ungetestet:

Dim Zeile
Zeile=1
For a=1 to 70
  For b=1 to 70
    ...usw
      Range ("A" & Zeile).Value=a & "," & b & "," & c & "," & ....
      Zeile=Zeile+1
    Next
Next

Das dürfte Excel aber sprengen oder zum Absturz bringen.

Woher ich das weiß:eigene Erfahrung
geri3d  31.08.2020, 00:27
'Wenn das ganze Arbeitsblatt gefüllt werden soll:

Dim Zeile
Dim Spalte
Zeile=1
Spalte=1
For a=1 to 70
  For b=1 to 70
    ...usw
      If Zeile = Rows.Count Then
        Spalte=Spalte+1
        Zeile=1
      end if
      Cells(Spalte,Zeile).Value=a & "," & b & "," & c & "," & ....
      Zeile=Zeile+1
    Next
Next
1
geri3d  31.08.2020, 00:35
@geri3d
Cells(Spalte,Zeile)
sollte
Cells(Zeile,Spalte)
heißen

Aber Excel schmiert heillos ab.

1