Excel 2010 - Per VBA Kombinatorik auslesen lassen

Optimiert könnte es so aussehen, oder?
Bzw. ist eine noch kompaktere Schreibweise möglich?
Code:
Sub Kombinationen()
Application.ScreenUpdating = False

Dim binCode() As Integer
Dim anzahl    As Double
Dim output    As String
Dim weiter    As Boolean
Dim Kombi     As Double

anzahl = 5
weiter = True
ReDim binCode(anzahl - 1)
Kombi = 2 ^ anzahl

j = 1
Do While weiter
    output = "'"
   
    For k = 0 To UBound(binCode)
        output = output & binCode(k)
    Next k
   
    Cells(j, 2) = (output)
    If j = Kombi Then
        weiter = False
        Exit Do
    End If
   
    j = j + 1
   
    For i = UBound(binCode) To 0 Step -1
        If binCode(i) = 0 Then
           binCode(i) = 1
    Exit For
        Else
           binCode(i) = 0
        End If
    Next i
Loop

Application.ScreenUpdating = True
End Sub
 
Das hier funktioniert auch. Die äußere Schleife ist noch mal etwas ausgedünnt. Wirklich entscheidend ist es aber eigentlich nicht. Berechnungen dieser Art sind von der Laufzeit her meist im Rahmen. Laufzeitintensiv sind vor allem schlecht geschriebene Sprünge zwischen Arbeitsmappen in Verbindung mit aktivierter Bildschirmaktualisierung.
Code:
Sub Kombinationen()
Application.ScreenUpdating = False

Dim binCode() As Integer
Dim anzahl    As Double
Dim output    As String
Dim Kombi     As Double

anzahl = 8

ReDim binCode(anzahl - 1)
Kombi = 2 ^ anzahl

j = 1
Do
    output = "'"
  
    For k = 0 To UBound(binCode)
        output = output & binCode(k)
    Next k
  
    Cells(j, 2) = (output)
    If j = Kombi Then Exit Do
  
  
    j = j + 1
  
    For i = UBound(binCode) To 0 Step -1
        If binCode(i) = 0 Then
           binCode(i) = 1
           Exit For
        Else
           binCode(i) = 0
        End If
    Next i
Loop

Application.ScreenUpdating = True
End Sub
 
Super! Habe wie immer vielen Dank!

Hoffentlich es ist ok, wenn ich noch zwei weitere Fragen stelle. :)
Für eine andere Datei habe ich ein Makro aufgebaut, welches per Klick auf ein Diagramm aktiviert wird.
Ein Registerblatt verfügt über 8 Diagramme deren Y- und X-Achsen sich je nach Eingabewerten stetig ändern.
Das Makro passt bei Aktivierung alle 16 Achsen an.
Könnte der Befehl "Application.ScreenUpdating = False" für diesen Fall weiterhelfen?
 
Kein Problem ;)

Klar, kannst du ja einfach ausprobieren. Aber dauert das aktuell lange, das einzige was der Befehl dann verhindern wird, ist das Flackern des Bildschirms.
 
Naja, die Dateien besitzen zum Teil bis zu 20 Registerblätter, was 160 Diagrammen entspricht.
Der Grund warum ich das Makro aktuell je Registerblatt aktiviere.
Denn zum Teil kam es vor, dass die Möhren von Rechnern abgeraucht sind.
Nun hatte ich die Hoffnung das Makro so zu modifizieren, dass dieser Befehl die Performance steigert, das Abstürzen minimiert und ermöglicht das Makro über alle Registerkarten automatisiert laufen zu lassen.
 
Zurück
Oben