Thema Datum  Von Nutzer Rating
Antwort
25.10.2020 08:58:10 Arno96
Solved
25.10.2020 16:58:23 Gast55452
NotSolved
Rot Makro für Variationen vn n Elementen zur r-ten Klasse
25.10.2020 22:21:54 xlKing
NotSolved
26.10.2020 08:17:18 Arno96
NotSolved
26.10.2020 15:46:14 Trägheit
NotSolved
26.10.2020 20:05:09 xlKing
NotSolved
08.02.2022 16:31:45 Paul93
NotSolved

Ansicht des Beitrags:
Von:
xlKing
Datum:
25.10.2020 22:21:54
Views:
863
Rating: Antwort:
  Ja
Thema:
Makro für Variationen vn n Elementen zur r-ten Klasse

Hallo Arno,

tatsächlich hatte ich einen entsprechenden Code in meinem Fundus. Hab ich vor 3 Jahren geschrieben. Allerdings lautet die Variable r bei mir k, da man normalerweise k Elemente aus n zieht. Bei Variationen mit Berücksichtigung der Reihenfolge aber eben ohne Wiederholung. Ich brauchte nur wenige Zeilen umschreiben um die Wiederholung mit einzubauen. Der folgende Code gehört in ein allgemeines Modul. (z.B. Modul1)

Sub VarIndTest()

n = 4
k = 2
wdh = True

Sheets.Add
For i = 1 To IIf(wdh, n ^ k, Application.Permut(n, k))
  arr = VarIndex(n, k, i, wdh)
  For p = 0 To UBound(arr)
    Cells(i, p + 1) = arr(p)
  Next p
Next i
End Sub

Function VarIndex(ByVal n As Long, ByVal k As Long, ByVal index As Long, Optional ByVal wdh As Boolean)
  
 Dim Coll As New Collection
  
 If wdh = False And IsError(Application.Permut(n, k)) Then
   VarIndex = Application.Permut(n, k)
   Exit Function
 End If
   
 If index < 1 Or index > IIf(wdh, n ^ k, Application.Permut(n, k)) Then Err.Raise 9
  
 ReDim arr(k - 1) As Variant
 mx = IIf(wdh, n ^ k, Application.Permut(n, k))
 s = ","
  
 For i = 1 To n
   Coll.Add i
 Next i
 
 For p = 1 To k
   p2 = 1: x = 0: i2 = 0
   Do
     x2 = x2 + x
     x = IIf(wdh, n ^ (k - p), Application.Permut(n - p, k - p))
     If index <= x2 + x Then
       Pos = Coll(p2)
       arr(p - 1) = Pos
       If wdh = False Then Coll.Remove p2
       Exit Do
     End If
     p2 = p2 + 1
   Loop Until x2 + x = mx
 Next p
 VarIndex = arr

End Function

Die Function gibt die entsprechende Variation anhand ihres Index zurück. Die Sub geht alle Indizes durch und listet diese in einem neuen Sheet. Teste auch was passiert wenn du die Variable wdh auf False setzt. Dann hast du eine Liste mit allen Variationen ohne Wiederholung, so wie es eigentlich üblich ist. In dem Fall muss k < n sein. Sonst erhältst du einen Fehler.

Gruß Mr. K.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
25.10.2020 08:58:10 Arno96
Solved
25.10.2020 16:58:23 Gast55452
NotSolved
Rot Makro für Variationen vn n Elementen zur r-ten Klasse
25.10.2020 22:21:54 xlKing
NotSolved
26.10.2020 08:17:18 Arno96
NotSolved
26.10.2020 15:46:14 Trägheit
NotSolved
26.10.2020 20:05:09 xlKing
NotSolved
08.02.2022 16:31:45 Paul93
NotSolved