= Kombinationen (n;k) auch die "dazwischen"

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: = Kombinationen (n;k) auch die "dazwischen"
von: Giuseppe
Geschrieben am: 16.02.2005 12:21:45
Hallo Excel und VBA Freunde
Ich habe da ein grösseres Problem:
Ich sollte die Position einer Zahlenkette bestimmen.
Da die letzte Zahl (Z4) "nur" bis 25 geht, ist die mathematische bestimmung
sehr schwierig.
Bedingungen:
- Es kommt keine Zahl (Z1 bis Z4) doppelt vor (in der Zeile gesehen)
- Alle Zahlen (Z1 bis Z4) sind natürliche Zahlen
- Z1 = Z2 - 1 , Z2 = Z3 - 1 , Z3 = Z4 - 1
- DER MAXIMALWERT VON Z4 IST IMMER 25
Beispiel:
(Die linke Kette, sind die Zahlen Z1 bis Z4, im Format "00")
(Die rechte Zahl, ist das Ergebnis, bzw. die Position)
01020304 = 1
01020305 = 2
.
.
.
01020324 = 21
01020325 = 22
01020405 = 23
01020406 = 24
.
.
.
01020516 = 54
.
.
.
22232425 = 12650
Ich könnte eine Matrix erstellen, doch die Rechenzeit ist zu lange.
Ach ein VBA Projekt, das mir alle Positionen durchrechnet (Zähler) kommt leider auch nicht in frage.
Deswegen suche ich nach einer Funktion, Formel oder einem VBA Projekt.
Das Ziel ist die Eingabe der Kette, mit dem Resultat der Position.
Die Letzte Position lässt sich mit
= Kombinationen(25,4)
ermitteln.
Doch wie ist es mit allen anderen?
Kann mir da vielleicht jemand weiterhelfen?
mfG
Giuseppe

Bild

Betrifft: AW: = Kombinationen (n;k) auch die "dazwischen"
von: Hans W. Hofmann
Geschrieben am: 16.02.2005 13:06:43
Da braucht es keine Kombinationen, wenn ich Deinen VOrtrag richtig verstnaden haben.
Du hast ein Zahlensystem auf der Basis von 25, wo bei Deine Zahlenreihe bei
01 02 03 04 = 16954 Dezimal startet
und bei
24 24 24 24 = 390624 Dezimal endet
Deine Position ist p*25^3+x*25^2+y*25+z - 16953, wobei pxyz Deine Kombination darstellt

Gruß HW

WebSite:Excellenzen & Powerpoint interaktiv
PowerPoint-Anwender www.ppt-user.de

Bild

Betrifft: AW: = Kombinationen (n;k) auch die "dazwischen"
von: Giuseppe
Geschrieben am: 16.02.2005 13:23:55
Hallo Hans W. Hofmann
Erst mal vielen herzlichen Dank!
Leider, leider funktioniert es noch nicht, so wie ich es gerne möchte.
Dein Ansatz, mit der Formel ist aber durchaus genial... genau so etwas suche ich.
Schaue Dir doch mal die Beispielmappe an:
https://www.herber.de/bbs/user/18168.xls
Ich versuche schon seit Tagen dieses Problem zu lösen....
mfG
Giuseppe
Bild

Betrifft: benutzerdef. funktion
von: IngoG
Geschrieben am: 16.02.2005 16:40:54
Hallo Giuseppe,
was hälst Du von folgender benutzerdefinierter Funktion:

Function mein_rang(a1%, a2%, a3%, a4%) As Double
Application.Volatile
mein_rang = 0
Do While (a1 > 0 And a1 < a2 And a2 < a3 And a3 < a4 And a4 <= 25)
     If a4 - a3 > 1 Then
        a4 = a4 - 1
    ElseIf a3 - a2 > 1 Then
        a4 = 25
        a3 = a3 - 1
    ElseIf a2 - a1 > 1 Then
        a4 = 25
        a3 = 24
        a2 = a2 - 1
    Else
        a4 = 25
        a3 = 24
        a2 = 23
        a1 = a1 - 1
    End If
    mein_rang = 1 + mein_rang
Loop
End Function

einfach in ein Modul kopieren und in der Tabelle zB =mein_rang(1,2,3,4) eingeben
bei mir funzt es...
Gruß Ingo
PS eine Rückmeldung wäre nett...
Bild

Betrifft: Mein Held
von: Giuseppe
Geschrieben am: 16.02.2005 16:54:29
Hallo Ingo
Eine Rückmeldung willst Du?
Wenn Du eine Frau wärst, würde ich Dich aufsuchen und küssen:)
Absolut Perfekt!
Ich war schon mehrere Tage und Nächte, hinter diesem Problem.
Nach vielen Fehlversuchen gab ich auf...
Stempel: Unlösbar!
Ich dachte auch, das Excel-Forum sei evt.
der falsche Ort für diese Frage.
Es ist ja in erster Linie ein mathematisches Problem...
... Es hat sich wieder mal herausgestellt: Nie aufgeben!
Danke, danke
mfG
Giuseppe
Bild

Betrifft: Danke für die Rückmeldung ;-)
von: IngoG
Geschrieben am: 16.02.2005 17:21:47
Hallo Giuseppe,
hatte zuerst einen rekursiven ansatz. Das funzt auch, aber bei großen Zahlen steigt excel mit stack-overflow aus...
im prinzip ist es ja nur ein triviales zählen aller kleineren gültigen lösungen.
also freut mich, dass ich Dir helfen konnte
Gruß Ingo
Bild

Betrifft: Hallo Ingo... noch eine Frage
von: Giuseppe
Geschrieben am: 17.02.2005 09:54:02
Hallo Ingo
Ich hätte da noch eine Bitte:
Meine Zahlen (a1 bis a4) werden AUCH im VBA erzeugt.
Könnte man die "Benutzerdefinierte Funktion" ins Makro einbauen?
Dieses Makro liegt in einer anderen Datei vor.
Es berechnet verschiedene Werte, als Resultat erhalte ich die Variablen
a1, a2, a3, a4... Da hätte ich gerne den "Rang" als Variable dazu.
Lässt sich da was machen?
mfG
Giuseppe
Bild

Betrifft: AW: Hallo Ingo... noch eine Frage
von: Giuseppe
Geschrieben am: 17.02.2005 11:18:00
Hallo Ingo
Ich habe mal selbst versucht:

Sub mein_rang2()
Dim a1 As Double, a2 As Double, a3 As Double, a4 As Double
Dim mein_rang2 As Double
a1 = 22
a2 = 23
a3 = 24
a4 = 25
Application.Volatile
mein_rang2 = 0
Do While (a1 > 0 And a1 < a2 And a2 < a3 And a3 < a4 And a4 <= 25)
     If a4 - a3 > 1 Then
        a4 = a4 - 1
    ElseIf a3 - a2 > 1 Then
        a4 = 25
        a3 = a3 - 1
    ElseIf a2 - a1 > 1 Then
        a4 = 25
        a3 = 24
        a2 = a2 - 1
    Else
        a4 = 25
        a3 = 24
        a2 = 23
        a1 = a1 - 1
    End If
    mein_rang2 = 1 + mein_rang2
Loop
MsgBox (mein_rang2)
End Sub

Ist das so ok?
mfG
Giuseppe
Bild

Betrifft: AW: Hallo Ingo... noch eine Frage
von: IngoG
Geschrieben am: 18.02.2005 10:54:56
Hallo Guiseppe,
binde doch einfach die ganze

Function ein und greife in deiner 

Sub auf die 

Function zu...
also ugf so:

Function mein_rang(...)...
...
End Function


Sub Deine_Sub
dim a1%, a2%, a3%, a4%, rang as double
... (hier stehen deine ganzen befehle einschließlich berechnung a1-a4)
rang=mein_rang(a1,a2,a3,a4)
End Sub


Bild

Betrifft: AW: Hallo Ingo... noch eine Frage
von: Giuseppe
Geschrieben am: 18.02.2005 11:13:40
Hallo Ingo
Danke für den Hinweis.
Aber weshalb sollte das Makro zweimal aufgeführt werden (Function und Sub)?
Ich habe diese Berechnungen auf zwei verschiedenen Exceldateien:
- Die erste ist nur für die Funktion (Mein_rang) im Excel
- Die zweite ist eine reine VBA Berechnung, ohne Excel (fast)
Wenn ich jetzt im gleichen Code, beide Makros aufliste,
so brauchts ja mehr Berechnungszeit...
Ich brauche jede Milisekunde, zugegeben, dies mit (45,4) war nur ein
Beispiel... ich spiele mit grösseren Zahlen (habe natürlich den Code
dementsprechend angepasst).
mfG
Giuseppe
Bild

Betrifft: AW: Hallo Ingo... noch eine Frage
von: IngoG
Geschrieben am: 18.02.2005 13:05:36
Hallo Guiseppe,
das "macro" wird nicht 2mal ausgeführt, sondern nur einmal undzwar beim aufruf der function.
ME ist das nur unwesentlich langsamer aber wesentlich übersichtlicher und wartungsfreundlicher.
wenn es aber die einzige stelle ist, wo du die funktionalität benötigst, kannst Du den Code nat auch direkt in deine Sub schreiben.
Gruß Ingo
Bild

Betrifft: Danke
von: Giuseppe
Geschrieben am: 18.02.2005 14:20:38
Hallo Ingo
Danke für alle Deine Mühe.
Ich denke, ich werde Dich nicht weiter mit dieser Problematik belästigen.
Ich habe nun genügend Ansätze, Regeln und Vorschläge...
Du hast mir echt geholfen, bessten Dank!
mfG
Giuseppe
Bild

Betrifft: Gerne, Danke für die Rückmeldung oT
von: IngoG
Geschrieben am: 18.02.2005 15:01:35
.
Bild

Betrifft: AW: = Kombinationen (n;k) auch die "dazwischen"
von: Hans W. Hofmann
Geschrieben am: 16.02.2005 17:51:12
Hab Deinen Vortrag doch nicht richtig verstanden :-):
http://www.lemitec.de/public
siehe im Statistikteil
Gruß HW
Bild

Betrifft: AW: = Kombinationen (n;k) auch die "dazwischen"
von: Giuseppe
Geschrieben am: 18.02.2005 14:58:28
Hallo Hans
Danke für den Hinweis(link)
Ich sehe, wir haben beide das selbe Hobby ;)
mfG
Giuseppe
 Bild

Beiträge aus den Excel-Beispielen zum Thema "= Kombinationen (n;k) auch die "dazwischen""