Registriert seit: 08.11.2018
Version(en): 2007
Ola!
Wie kann ich aus jedem Block immer einen Wert berücksichtigen und dann noch alle Reihenfolgen/Kombinationen erstellen:
Block1
c1-11
c1-12
Block2
c1-21
c1-22
Block3
c1-31
c1-32
Block4
c1-41
Block5
c1-51
c1-52
c1-53
Ein (neuer) Block mit jeweils einem Wert wäre zum Beispiel:
c1-11
c1-21
c1-31
c1-41
c1-51
oder
c1-12
c1-21
c1-31
c1-41
c1-53
usw.
Ein weitere unterschiedliche Reihenfolge wäre zum Beispiel:
c1-51
c1-11
c1-21
c1-31
c1-41
oder
c1-12
c1-21
c1-53
c1-31
c1-41
usw.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
14.11.2018, 13:16
(Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2018, 13:32 von LCohen.)
Mappe.xlsx (Größe: 9,92 KB / Downloads: 6)
Kopiere Zeile 8 runter bis Zeile 31 (24 Kombinationen). Die Begriffe "Permutation" in der Datei sind falsch; es handelt sich um Kombinationen.
Die Permutationen, die Du nun noch zusätzlich haben willst, sind hier nicht mit drin. Sie vergrößern die 24 Kombinationen (2*2*2*1*3) um den Faktor 5! auf insgesamt 2880 Ergebnisse, also (2*2*2*1*3)*(1*2*3*4*5).
Hier die
Formel-Lösung für Auflistung von Permutationen von maximal 8 Zeichen (Deine c-51 müssten dafür temporär durch 1 Zeichen ersetzt werden, so dass Du 5 Zeichen hättest).
Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:1 Nutzer sagt Danke an LCohen für diesen Beitrag 28
• PeterN
Registriert seit: 16.08.2017
Version(en): 2007 / 2010 / Web
Hi
Fangen wir hinten an.
Zitat:und dann noch alle Reihenfolgen/Kombinationen erstellen
Das sollte mit dieser Vorlage funktionieren.
Kombinationen 2.xlsm (Größe: 20,29 KB / Downloads: 6)
Zitat:Wie kann ich aus jedem Block immer einen Wert berücksichtigen
Kann man unter der Verwendung der Excelfunktionen Zufall.... machen. Um dabei aber zu helfen, wäre es sinnvoll den richtigen Tabellenaufbau zu sehen (Bsp.Datei).
Gruß Elex
Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:1 Nutzer sagt Danke an Elex für diesen Beitrag 28
• PeterN
Registriert seit: 08.11.2018
Version(en): 2007
Danke euch Beiden!
Ich nehme zuerst die Mappe von LCohen und anschließend die Kombinationen 2 von Elex. Fertig!
Nochmals herzlichen Dank!
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
14.11.2018, 19:16
(Dieser Beitrag wurde zuletzt bearbeitet: 14.11.2018, 19:16 von LCohen.)
Hier noch mal zusammengefasst:
181114 CEF17993 Alle Kombinationen oWdh permutieren.xlsx (Größe: 12,42 KB / Downloads: 9)
Bitte an Strg-U (und Strg-R in den Sort-Blättern) denken! In jedem der 4 Blätter! Direkt nach dem Öffnen, keine Cursortaste vorher verwenden.
Spart Traffic und Speicherplatz.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
16.11.2018, 20:57
(Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2018, 20:57 von LCohen.)
Folgender Code erstellt die Datei auch. Seltsamerweise funktioniert - in Excel 365 - die Formel im Blatt Sort1 erst, wenn man sie mit F2 Enter einmal anfasst (was dann gleich der ganzen Spalte hilft). Ich habe 2 Stunden versucht, das zu umgehen bzw. zu verstehen. Es ist mir noch nicht gelungen. Vielleicht kann jemand das ja mal ausprobieren, entweder in der gleichen oder einer anderen Excel-Version. Das wäre sehr nett!
Hinweis: Makro benötigt ca. 8 Sekunden, da ca. 30.000 Formeln entstehen.
EDIT: die beiden fettgedruckten Zeilen .FormulaR1C1 = .FormulaR1C1 (sind hier auskommentiert) beheben das Malheur. Aber das kann es ja wohl nicht sein?
Sub AlleSpalteneintraegeKombinierenUndPermutieren()
'https://www.clever-excel-forum.de/thread-17993.html
Workbooks.Add xlWorksheet: ActiveSheet.Name = "Komb": With ActiveWorkbook.Names
.Add Name:="KombAbHier", RefersToR1C1:="=MAX(1,PRODUCT(COUNTA(R[-5]C:R[-1]C),RC[1]))"
.Add Name:="KombFeld", RefersToR1C1:="=INDEX(R1C:R5C,MOD((ROW(R[-7]C)-1)/R6C[1],R6C/R6C[1])+1)"
.Add Name:="K", RefersToR1C1:="=Komb!R6C1"
[A1:E1] = Split("1-1 2-1 3-1 4-1 5-1")
[A2:E2] = Split("1-2 2-2 3-2 5-2")
[A3:E3] = Split(" 5-3")
[A6:F6].FormulaR1C1 = "=KombAbHier"
[A8:E31].FormulaR1C1 = "=KombFeld"
[A1:F6].Interior.Color = 44444
Sheets.Add: ActiveSheet.Name = "Perm"
[A1] = 12345: [E1].FormulaR1C1 = "=COUNTA(C[-4])": [E2] = "http://excelformeln.de/formeln.html?welcher=325"
[A2].FormulaR1C1 = "=LEFT(INDEX(C,RC[2]),LEN(R1C)-RC[1]-1)&RIGHT(INDEX(C,RC[2]),RC[1])&LEFT(RIGHT(INDEX(C,RC[2]),RC[1]+1),1)"
[B2].FormulaR1C1 = "=9-MATCH(0,INDEX(MOD(ROW()-1,FACT(9-COLUMN(R[0]C1:C8))),),-1)"
[C2].FormulaR1C1 = "=ROW()-FACT(RC[-1])": [A2:C120].FillDown
.Add Name:="P", RefersToR1C1:="=Perm!R1C5"
Sheets.Add: ActiveSheet.Name = "Sort1"
[A1:E2880].FormulaR1C1 = "=INDEX(Komb!C1:C10,MOD(ROW(INDEX(C,K+ROW()-1)),K)+ROW(Komb!R8C1),MID(INDEX(Perm!C1,ROW(INDEX(C,K+ROW()-1))/K),COLUMN(),1))"
'hier passiert es!
'[A1:E2880].FormulaR1C1 = [A1:E2880].FormulaR1C1
Sheets.Add: ActiveSheet.Name = "Sort2"
.Add Name:="Sort2", RefersToR1C1:="=INDEX(Sort1!C1:C10,TRUNC(ROW(INDEX(C,P+ROW()-1))/P)+MOD(ROW()*K-K,K*P),COLUMN())"
[A1:E2880].FormulaR1C1 = "=Sort2"
'[A1:E2880].FormulaR1C1 = [A1:E2880].FormulaR1C1
End With: End Sub
Registriert seit: 16.08.2017
Version(en): 2007 / 2010 / Web
Excel2007
Füge ich den Code in einem allg. Modul ein funktioniert es. Alle Formeln werden auch sofort berechnet.
Zeit 1-2s
Sort2 = 2880 Perm.
Sort1 = 2880 in anderer Reihenfolge
Perm = die 120 Permut. mit der Formel von Excelformeln
Komb = die 24 Kombis
Codeausführung aus dem Modul Tabelle1 geht nicht.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
16.11.2018, 22:12
(Dieser Beitrag wurde zuletzt bearbeitet: 16.11.2018, 22:13 von LCohen.)
Danke, elex! Also ein Bug in 365. Es braucht einen Tritt.
Btw: Konstruktionsmakros gehören immer in ein Modul, kein Klassenmodul. Die resultierende Datei ist dann ohne VBA.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
17.11.2018, 06:57
(Dieser Beitrag wurde zuletzt bearbeitet: 17.11.2018, 07:12 von LCohen.)
Zur Erklärung der Ausführungsgeschwindigkeit (vermeintliche 8 statt 1-2 Sekunden, siehe aber unten):
Ich hatte in meinem Leben immer PC's, die weit unter dem Optimum sind. Auch heute kaufe ich mir solche bewusst. Der Grund: Nur so wird man immer angehalten, bei Lösungen mit Ressourcen sparsam umzugehen. Produktiv programmieren muss ich zum Glück nicht (oder kaum).
- Surface Pro4 m3 4GB 128GBSSD Win10Pro Office365 (2016 € 1050 mit Stift und Covertastatur (gab's danach noch billiger))
- Akoya MD61900 m3 4GB 64GBeMMC Win10Home Office365 (2018 € 250 herabgesetzt bei Aldi)
- ASUSeeePC900 AtomN270 1GB 12GBSSD WinXPHome Office2000 (2009 € 210 (neu) bei ebay in einer Massenaktion)
(eMMC ist bekanntlich die sehr viel langsamere Variante einer elektronischen Disk; vermutlich ist das auch bei dem ASUS der Fall)
Bislang habe ich nur ein Office pro PC installiert. Ich werde mir aber vermutlich einen Mini-PC (Desktop) für ca. € 200-400 zulegen, auf dem ich 2000/2010/365 installiere (ich habe zwei Office2000 Vollversionen). Dann kann ich leichter testen.
Daher sind meine gemessenen Zeiten immer länger, als es bei dem Schnitt aller wäre.
Überraschung heute morgen:
Der Fehler taucht nur beim Surface (mit 365) auf. Es benötigt 8 Sekunden und hat irgendwo anscheinend ein Problem. Beim Akoya sind es nur etwa 3 Sekunden und beim Asus (dem Uralt-PC mit SingleCore) sogar nur 1,2 Sekunden: Excel2000 ist eben höllisch schnell.