Microsoft Excel

Herbers Excel/VBA-Archiv

Alle möglichen Zahlenkombinationen auflisten

Betrifft: Alle möglichen Zahlenkombinationen auflisten von: Dominic
Geschrieben am: 16.04.2015 15:47:18

Hallo zusammen,

wie kann ich in Excel alle möglichen Zahlenkombinationen auflisten für folgenden Fall:

Es handelt sich um eine fünfstellige Zahl, addiert man eine Reihe zusammen, kommt immer die Summe 5 heraus. Die Zusammenstellung jedoch ist unterschiedlich und variabel.

Also Beispiel:
11111 oder
02012 oder
03011 oder
05000 oder
41000 oder
50000 oder
02300 usw.

Wie kann ich hier in Excel sämtliche Kombinationsmöglichkeiten in einer Spalte untereinander aufführen lassen? :)

Ich komme einfach nicht drauf.. :(

Vielen Dank!

  

Betrifft: AW: Alle möglichen Zahlenkombinationen auflisten von: Daniel
Geschrieben am: 16.04.2015 16:01:50

Hi

1. Zähle in Spalte A alle möglichen Zahlenkombinationen auf, beginne in Zeile 2.
Schreibe hierzu in A2 die Formel =Zeile(A1) und ziehe sie bis A50001 runter.

2. Kopiere die Spalte A und füge sie an gleicher stelle als Wert ein.

3. kennzeichne mit einer Formel alle Zeilen mit Quersumme 5 mit der Zeilennummer und alle anderen mit der 0. Hierszu folgende Formel in B2 (und dann nach unten ziehen):
=WENN(SUMMENPRODUKT(WERT(TEIL(TEXT(A2;"00000");SPALTE($A$1:$E$1);1)))=5;ZEILE();0)

4. Schreibe in B1 ebenfalls die 0 (Überschrift!)

5. Wende auf die Spalten A:B die funktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an, mit der Spalte B als kriterium und der Option "keine Überschrift".

6. lösche Spalte B wiedre

Gruß Daniel


  

Betrifft: AW: Alle möglichen Zahlenkombinationen auflisten von: MCO
Geschrieben am: 16.04.2015 16:02:10

Hi!
War einfacher als ich anfangs dachte

Gruß, MCO

Sub kombi()

Dim a
For a = 0 To 5
    For b = 0 To 5
        For c = 0 To 5
            For d = 0 To 5
                For e = 0 To 5
                
                If a + b + c + d + e = 5 Then
                    Debug.Print a & b & c & d & e
                End If

Next: Next: Next: Next: Next


End Sub
00005
00014
00023
00032
00041
00050
00104
00113
00122
00131
00140
00203
00212
00221
00230
00302
00311
00320
00401
00410
00500
01004
01013
01022
01031
01040
01103
01112
01121
01130
01202
01211
01220
01301
01310
01400
02003
02012
02021
02030
02102
02111
02120
02201
02210
02300
03002
03011
03020
03101
03110
03200
04001
04010
04100
05000
10004
10013
10022
10031
10040
10103
10112
10121
10130
10202
10211
10220
10301
10310
10400
11003
11012
11021
11030
11102
11111
11120
11201
11210
11300
12002
12011
12020
12101
12110
12200
13001
13010
13100
14000
20003
20012
20021
20030
20102
20111
20120
20201
20210
20300
21002
21011
21020
21101
21110
21200
22001
22010
22100
23000
30002
30011
30020
30101
30110
30200
31001
31010
31100
32000
40001
40010
40100
41000
50000


  

Betrifft: ein wenig schneller von: Erich G.
Geschrieben am: 16.04.2015 16:35:02

Hi zusammen,
so hat der Prozessor weniger zu tun:

Sub kombi2()
   Dim a As Long, b As Long, c As Long, d As Long

   For a = 0 To 5
      For b = 0 To 5 - a
         For c = 0 To 5 - a - b
            For d = 0 To 5 - a - b - c
               Debug.Print a & b & c & d & 5 - a - b - c - d
   Next: Next: Next: Next
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: ein wenig schneller von: MCO
Geschrieben am: 17.04.2015 10:20:44

Sehr gut, Erich
Immerhin statt 7777 Durchläufen nur 127.
Auch wenn man es nicht in Sekunden messen kann: Sehr schön!

Gruß, MCO


  

Betrifft: AW: Alle möglichen Zahlenkombinationen auflisten von: Dominic
Geschrieben am: 21.04.2015 13:04:18

Hi,

also zunächst einmal vielen Dank an alle für die Unterstützung!
Die gezeigten Varianten kann ich auch einwandfrei in meine Datei einbauen,
es kommt mir jedoch vor als fehlen hier noch viele möglichen Varianten, hätte mehr als 127 erwartet... :)

Aber funktioniert, danke! :)


  

Betrifft: Zahlenkombinationen mit Quersumme 5 von: Erich G.
Geschrieben am: 16.04.2015 16:46:13

Hi Dominic,
so ginge es auch:

 ABCD
1ZeileSumFünfteAlle
200500005
311400014
422300023
533200032
644100041
755000050
866-1999999
977-1999999
1088-1999999
1199-1999999
12101400104
13112300113
14usw.   
15499729-1999999
16499830-1999999
17499931-1999999
1850005050000
19geht bis Zeile 5002   

Formeln der Tabelle
ZelleFormel
B2=SUMMENPRODUKT(WERT(TEIL(TEXT(A2;"0000"); SPALTE($A$1:$D$1); 1)))
C2=WENN(B2<6;5-B2;-1)
D2=WENN(C2>-1;TEXT(A2;"0000")&C2;"999999")


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Am Schluss brauchst du nur nach Spalgte D ("Alle") zu sortieren.

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: Ich hätte das jetzt klassisch wie folgt gelöst,... von: Luc:-?
Geschrieben am: 18.04.2015 03:53:51

…Erich (Dominic scheint's ja nicht mehr zu interessieren!);
zuerst die Anzahl der Variationen ermitteln, die die Bedingung erfüllen:
{=ANZAHL(WENN(GANZZAHL((ZEILE($1:$6481)-1)/6^4)+GANZZAHL(REST((ZEILE($1:$6481)-1);6^4)/6^3)+
GANZZAHL(REST(REST((ZEILE($1:$6481)-1);6^4);6^3)/6^2)+GANZZAHL(REST(REST(REST((ZEILE($1:$6481)-1);6^4);
6^3);6^2)/6)+REST(REST(REST(REST((ZEILE($1:$6481)-1);6^4);6^3);6^2);6)=5;--(GANZZAHL((ZEILE($1:$6481)
-1)/6^4)&GANZZAHL(REST((ZEILE($1:$6481)-1);6^4)/6^3)&GANZZAHL(REST(REST((ZEILE($1:$6481)-1);6^4);
6^3)/6^2)&GANZZAHL(REST(REST(REST((ZEILE($1:$6481)-1);6^4);6^3);6^2)/6)&REST(REST(REST(REST(
(ZEILE($1:$6481)-1);6^4);6^3);6^2);6));""))}
Das ergibt 126. Dann entweder 126 1zellige MatrixFmln verwenden …
{=KKLEINSTE(WENN(GANZZAHL((ZEILE($1:$6481)-1)/6^4)+GANZZAHL(REST((ZEILE($1:$6481)-1);6^4)/6^3)+
GANZZAHL(REST(REST((ZEILE($1:$6481)-1);6^4);6^3)/6^2)+GANZZAHL(REST(REST(REST((ZEILE($1:$6481)-1);6^4);
6^3);6^2)/6)+REST(REST(REST(REST((ZEILE($1:$6481)-1);6^4);6^3);6^2);6)=5;--(GANZZAHL((ZEILE($1:$6481)-
1)/6^4)&GANZZAHL(REST((ZEILE($1:$6481)-1);6^4)/6^3)&GANZZAHL(REST(REST((ZEILE($1:$6481)-1);6^4);6^3)
/6^2)&GANZZAHL(REST(REST(REST((ZEILE($1:$6481)-1);6^4);6^3);6^2)/6)&REST(REST(REST(REST((ZEILE($1:
$6481)-1);6^4);6^3);6^2);6));"");ZEILE(A1))}
…oder nur eine einzige über 126 Zellen/Zeilen:
{=TEXT(KKLEINSTE(WENN(GANZZAHL((ZEILE(1:6481)-1)/6^4)+GANZZAHL(REST((ZEILE(1:6481)-1);6^4)/6^3)+
GANZZAHL(REST(REST((ZEILE(1:6481)-1);6^4);6^3)/6^2)+GANZZAHL(REST(REST(REST((ZEILE(1:6481)-1);6^4);
6^3);6^2)/6)+REST(REST(REST(REST((ZEILE(1:6481)-1);6^4);6^3);6^2);6)=5;--(GANZZAHL((ZEILE(1:6481)-1)
/6^4)&GANZZAHL(REST((ZEILE(1:6481)-1);6^4)/6^3)&GANZZAHL(REST(REST((ZEILE(1:6481)-1);6^4);6^3)/6^2)&
GANZZAHL(REST(REST(REST((ZEILE(1:6481)-1);6^4);6^3);6^2)/6)&REST(REST(REST(REST((ZEILE(1:6481)-1);6^4);
6^3);6^2);6));"");ZEILE(1:126));"00000")}
Die Vornullen kann man ja über die Formatierung erzeugen oder wie in der letzten Fml mit TEXT, was ggf angeratener sein mag.
Die Fmln sind leider ziemlich lang, da klassisch. Dafür wird aber auch nur eine über 126 Zellen benötigt. Ich habe dafür auch UDFs, was die Fml verkürzen würde, aber die sind schon älter und leider nicht aktiv MxFml-fähig, d.h., sie können im HptArgument nur Einzelwerte, keine Datenfelder verarbeiten, die hier aber wg KKLEINSTE erforderlich sind.
Übrigens erkennst du sicher, dass es sich bei diesen Fmln um eine Dezimalzahlen­Konvertierung in ein HexalZahlen-System (Ziffern 0…5) handelt.
Gruß, Luc :-?


  

Betrifft: AW: Ich hätte das jetzt klassisch wie folgt gelöst,... von: Dominic
Geschrieben am: 21.04.2015 13:08:29

Hi,

vielen Dank auch für Eure Varianten.

Die zweite Version vom Erich kann ich noch nicht ganz nachvollziehen, werden doch auch Werte aufgeführt die es "nicht gibt".

999999 wäre z. B. falsch. Es gibt max. 5 Stellen, und die Summe dieser 5 Stellen kann/darf den Wert 5 nicht überschreiten.
Sprich:

00005
01013
40001
50000
22001
usw.

Die anderen gezeigten Varianten funktionieren aber einwandfrei. Danke dafür!


 

Beiträge aus den Excel-Beispielen zum Thema "Alle möglichen Zahlenkombinationen auflisten"