Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Kombinatorik; Alle Möglichkeiten inkl. Nebenbedingungen von Excel ausrechnen lassen
#1
Hallo Leute,

für die Erstellung einer wissenschaftlichen Arbeit benötige ich etwas Hilfe / ein paar Tipps zur Lösung eines "technischen" Problems.

Und zwar geht es darum, dass ich ein Portfolio aus 5 Aktien zusammenstelle, wobei der jeweilige Portfolioanteil der einzelnen Aktien variieren soll.

Eine Aktie soll immer mindestens 10% Anteil haben und höchstens 60% dann logischerweise. Der Portfolioanteil der einzelnen Aktien soll in 10%-Schritten verändert werden.
Zusammen dürfen die einzelnen Anteile natürlich auch 100% nicht übersteigen. Bitte schaut einmal das angehängte Bild an, ich denke das erklärt vieles.

Ich habe schon von Hand angefangen, die Möglichkeiten aufzuschreiben (siehe Bild), doch dann ist mir schnell klar geworden, dass es 1. ziemlich viel Arbeit wäre, was an sich nicht so schlimm ist, aber zweitens eben auch sehr unübersichtlich, was schnell zu Fehlern meinerseits führen könnte.

Am Ende müsste ich dann noch mit den jeweiligen Kombinationen weiterrechnen können, weshalb es vielleicht doch nicht so eine gute Idee von mir gewesen ist, mehrere Unternehmen/Aktien in die gleiche Zelle zu schreiben?!

Hat jemand evtl. eine bessere Idee, wie man das Problem lösen könnte? Ich wäre über jeden Tipp dankbar!

Mit freundlichen Grüßen
Hannes


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#2
Hallo  Hannes,

A) Aufbau
Auf jeden Fall in den Überschriften die Namen und in der Matrix die Prozentzahlen für Version und Namen eintragen.

B) Kombinationen
Falls sich in Zukunft die Schrittweite der unterschiedlichen Anteile ändern können, würde ich eine VBA-Lösung empfehlen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Hannes
Antworten Top
#3
Hi

Hier mal die möglichen Kombinationen für deine Vorgabe.

Code:
10    10    10    10    60
10    10    10    20    50
10    10    10    30    40
10    10    10    40    30
10    10    10    50    20
10    10    10    60    10
10    10    20    10    50
10    10    20    20    40
10    10    20    30    30
10    10    20    40    20
10    10    20    50    10
10    10    30    10    40
10    10    30    20    30
10    10    30    30    20
10    10    30    40    10
10    10    40    10    30
10    10    40    20    20
10    10    40    30    10
10    10    50    10    20
10    10    50    20    10
10    10    60    10    10
10    20    10    10    50
10    20    10    20    40
10    20    10    30    30
10    20    10    40    20
10    20    10    50    10
10    20    20    10    40
10    20    20    20    30
10    20    20    30    20
10    20    20    40    10
10    20    30    10    30
10    20    30    20    20
10    20    30    30    10
10    20    40    10    20
10    20    40    20    10
10    20    50    10    10
10    30    10    10    40
10    30    10    20    30
10    30    10    30    20
10    30    10    40    10
10    30    20    10    30
10    30    20    20    20
10    30    20    30    10
10    30    30    10    20
10    30    30    20    10
10    30    40    10    10
10    40    10    10    30
10    40    10    20    20
10    40    10    30    10
10    40    20    10    20
10    40    20    20    10
10    40    30    10    10
10    50    10    10    20
10    50    10    20    10
10    50    20    10    10
10    60    10    10    10
20    10    10    10    50
20    10    10    20    40
20    10    10    30    30
20    10    10    40    20
20    10    10    50    10
20    10    20    10    40
20    10    20    20    30
20    10    20    30    20
20    10    20    40    10
20    10    30    10    30
20    10    30    20    20
20    10    30    30    10
20    10    40    10    20
20    10    40    20    10
20    10    50    10    10
20    20    10    10    40
20    20    10    20    30
20    20    10    30    20
20    20    10    40    10
20    20    20    10    30
20    20    20    20    20
20    20    20    30    10
20    20    30    10    20
20    20    30    20    10
20    20    40    10    10
20    30    10    10    30
20    30    10    20    20
20    30    10    30    10
20    30    20    10    20
20    30    20    20    10
20    30    30    10    10
20    40    10    10    20
20    40    10    20    10
20    40    20    10    10
20    50    10    10    10
30    10    10    10    40
30    10    10    20    30
30    10    10    30    20
30    10    10    40    10
30    10    20    10    30
30    10    20    20    20
30    10    20    30    10
30    10    30    10    20
30    10    30    20    10
30    10    40    10    10
30    20    10    10    30
30    20    10    20    20
30    20    10    30    10
30    20    20    10    20
30    20    20    20    10
30    20    30    10    10
30    30    10    10    20
30    30    10    20    10
30    30    20    10    10
30    40    10    10    10
40    10    10    10    30
40    10    10    20    20
40    10    10    30    10
40    10    20    10    20
40    10    20    20    10
40    10    30    10    10
40    20    10    10    20
40    20    10    20    10
40    20    20    10    10
40    30    10    10    10
50    10    10    10    20
50    10    10    20    10
50    10    20    10    10
50    20    10    10    10
60    10    10    10    10

Gruß Elex
[-] Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:
  • Hannes
Antworten Top
#4
Hi,

es gibt noch deutlich mehr Kombinationen!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#5
Es wäre schön, wenn Ihr beide etwas deutlicher würdet ;)

Elex hätte durchaus die Aktien drüber schreiben dürfen.

Und Bosko hätte benennen dürfen, was er meint. Denn Elex hat die 7 Kombinationen tatsächlich exakt 126mal permutiert.

Kombinationen Permutationen Anzahl
60 10 10 10 10 => 5!/4! = 5
50 20 10 10 10 => 5!/3! = 20
40 30 10 10 10 => 5!/3! = 20
40 20 20 10 10 => 5!/2!/2! = 30
30 30 20 10 10 => 5!/2!/2! = 30
30 20 20 20 10 => 5!/3! = 20
20 20 20 20 20 => 1

ergibt 126 Kombinationen/Permutationen, wenn jede Aktie enthalten ist (Elex hat sich das Beispiel nicht angeschaut, Bosko schon).

Die Tabelle müsste man also nun weiterstricken für statt alle 5 Aktien nur deren 4, 3 und 2.

60 20 10 10 => 4!/2! = 12
50 20 20 10 => 4!/2! = 12
40 40 10 10 => 4!/2!/2! = 6
40 30 20 10 => 4! = 24
40 20 20 20 => 4!/3! = 4
30 30 30 10 => 4!/3! = 4
30 30 20 20 => 4!/2!/2! = 6

Diese 68 Kombinationen/Permutationen muss man noch x5 rechnen, weil man auf 5 Arten 4 aus 5 Aktien (5!/4!/1! = 5) auswählen kann: 340

60 30 10 => 3!
60 20 20 => 3!/2!
50 40 10 => 3!
50 30 20 => 3!
40 40 20 => 3!/2!
40 30 30 => 3!/2!

sind 27, mit dem Faktor 3 aus 5 malgenommen (5!/3!/2! = 10): 270

60 40 => 2
50 50 => 1

sind 3, mit dem Faktor 2 aus 5 malgenommen (5!/2!/3! = 10): 30

ergibt 126+340+270+30= 766 Konstellationen für Deine Aktien
Antworten Top
#6
Hallo Hannes,

in der Anlage einmal eine flexible Berechnung der Kombinationen. Der Schritt darf zur Zeit nicht kleiner als (Max-Min)/100 sein.


Code:
Option Explicit
Dim intAnz As Integer
Dim lngAusgabe As Long
Dim dblGesAkt As Double
Dim dblGesMin As Double
Dim dblGesMax As Double
Dim varListe() As Variant
Dim varAusgabe() As Variant
Dim rngAusgabe As Range
Private Sub cbTuwat_Click()
Dim intSpalte As Integer
Dim blnGueltig As Boolean

lngAusgabe = 0
varListe = ThisWorkbook.Names("Liste").RefersToRange.Value
Set rngAusgabe = ThisWorkbook.Names("Ausgabe").RefersToRange
intAnz = UBound(varListe, 2) - 2
ReDim varAusgabe(1 To 1, 1 To intAnz)
dblGesMin = varListe(1, intAnz + 2) - 0.0000001
dblGesMax = varListe(2, intAnz + 2) + 0.0000001
blnGueltig = True
For intSpalte = 2 To intAnz + 1
    If varListe(1, intSpalte) > varListe(2, intSpalte) Then blnGueltig = False
    If varListe(3, intSpalte) <= 0.000001 Then blnGueltig = False
    If (varListe(2, intSpalte) - varListe(1, intSpalte)) / varListe(3, intSpalte) > 100 Then blnGueltig = False
Next intSpalte

If blnGueltig Then
    Call Recursiv(1)
    MsgBox lngAusgabe & " Kombinationen"
Else
    MsgBox "Eine Bedingung ungültig."
End If

End Sub

Sub Recursiv(ByVal intAkt As Integer)
Dim dblAkt As Double

dblAkt = varListe(1, intAkt + 1)
Do While dblAkt < varListe(2, intAkt + 1) + 0.000001
    dblGesAkt = dblGesAkt + dblAkt
    varAusgabe(1, intAkt) = dblAkt
    If dblGesAkt <= dblGesMax Then
        If intAkt = intAnz Then
            If dblGesAkt >= dblGesMin Then
                lngAusgabe = lngAusgabe + 1
                rngAusgabe.Offset(lngAusgabe - 1, 0) = lngAusgabe
                rngAusgabe.Offset(lngAusgabe - 1, 1).Resize(1, intAnz) = varAusgabe
            End If
        Else
            Call Recursiv(intAkt + 1)
        End If
    End If
    dblGesAkt = dblGesAkt - dblAkt
    dblAkt = dblAkt + varListe(3, intAkt + 1)
Loop

End Sub


Angehängte Dateien
.xlsm   GültigeKombinationen.xlsm (Größe: 22,88 KB / Downloads: 6)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • Hannes
Antworten Top
#7
Hallo LCohen,

zu:
Zitat:(Elex hat sich das Beispiel nicht angeschaut, Bosko schon).
Die Tabelle müsste man also nun weiterstricken für statt alle 5 Aktien nur deren 4, 3 und 2.

Elex die Aufgabe doch genau richtig gelöst.

Zitat:Eine Aktie soll immer mindestens 10% Anteil haben und höchstens 60% dann logischerweise.

Du hast dich durch den Aufbau des Beispiels verwirren lassen.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Antworten Top
#8
Hi LCohen


Zitat: (Elex hat sich das Beispiel nicht angeschaut).

Nö Nö hab ich. :19:
Wie immer bleibt ein wenig Raum für Interpretation. Laut Beispiel geht es für mich immer um alle 5 Aktien. Nur stehen da halt mehrere in einer Zelle.

Bis dahin
Antworten Top
#9
Ich stimme Elex zu:


Code:
Sub M_snb()
  For j = 11116 To 61111
    If j \ 10 ^ 4 + (j Mod 10 ^ 4) \ 10 ^ 3 + (j Mod 10 ^ 3) \ 10 ^ 2 + (j Mod 10 ^ 2) \ 10 + j Mod 10 = 10 And InStr(Format(j), "0") = 0 Then c00 = c00 & "_" & j
  Next
    
  sn = Split(c00, "_")
  Cells(1, 8).Resize(UBound(sn) + 1) = Application.Transpose(sn)
End Sub

oder

Code:
Sub M_snb()
  For j = 11116 To 61111
    If j \ 10 ^ 4 + (j Mod 10 ^ 4) \ 10 ^ 3 + (j Mod 10 ^ 3) \ 10 ^ 2 + (j Mod 10 ^ 2) \ 10 + j Mod 10 = 10 Then c00 = c00 & "_" & j
  Next
    
  sn = Filter(Split(Mid(c00, 2), "_"), "0", 0)
  Cells(1, 8).Resize(UBound(sn) + 1) = Application.Transpose(sn)
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#10
Stimmt. Ich habe falsch geguckt und überlesen, dass JEDE der 5 Aktien mindestens 10% und nicht nur 0% haben soll :meaculpa: (der Smilie fehlt!)

Also ist richtig 121 (EDIT wg snb: 126, wie oben ersichtlich, bei Minimum 10%) statt 766 (bei Minimum 0%).
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • Hannes
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste