Absoluten Profi gesucht -

Hallo Leute,

habe ein recht großes Problem. Ich bin ein VBA-Anfänger und muss aber eine dynamische (Anzahl der Spalten und Gewichtungsabstände sollten dynamisch sein) Gewichtungsmatrix in Excel erstellen:
Die sollte folgendermaßen aussehen: Ich habe zum Beispiel 14 Spalten (dynamisch einstellbar). Auf diesen Spalten sollten automatisch einzelne fixe Gewichtungen verteilt werden und in Summe 100% ergeben.

ZB:
0 0 0 0 0 0 0 0 0 0 0 0 0 100
0 0 0 0 0 0 0 0 0 0 0 0 10 90
0 0 0 0 0 0 0 0 0 0 0 0 20 80

100 0 0 0 0 0 0 0 0 0 0 0 0 0

etc.

Dabei sollten von Excel alle Gewichtungen automatischen ausgegeben werden und die Anzahl der Spalten bzw. der Gewichtungsabstände, die immer gleich sein sollen, dynamisch einstellbar sein.

Gibt es dafür eine Lösung? Ich wäre sämtlichen Excel-VBA-Profis echt sehr dankbar für Lösungsvorschläge

Danke vielmals für Eure Tipps.

Liebe Grüße

Dabei sollten von Excel alle Gewichtungen automatischen
ausgegeben werden und die Anzahl der Spalten bzw. der
Gewichtungsabstände, die immer gleich sein sollen, dynamisch
einstellbar sein.

Hallo Rob,

trotz des Betreffs melde ich mich:smile:

das Einzige was ich glaub verstanden zu haben, du willst da VBa-Code haben der bei 8,10,14 Spalten funktioniert.
Okay, kein Akt.

Alles andere habe ich leider nicht verstanden

„alle Gewichtungen automatischen ausgegeben werden“
Völlig unklar.

„Gewichtungsabstände“
Genauso.

Gruß
Reinhard

Hallo Reinhard,

erstmals vielen Dank für deine Hilfe und deine Anmerkungen. Sorry, wegen meiner schlechten Beschreibung. Anscheinend bin ich schon zu tief im Problem drin :smile:
Hier nochmals das Problem. Ich muss sozusagen 100% auf verschiedene Spalten aufteilen, wobei von Excel dann alle Möglichkeiten angezeigt werden sollten, wichtig ist alle Möglichkeiten.
Um die 100% aufzuteilen, muss ich zuerst mal festlegen auf wieviele Spalten diese aufgeteilt werden sollen und mit welchen Gewichtungen.
Die Anzahl der Spalten sowie die Gewichtung sollte der User wählen können.
Beispiel: Ich wähle 2 Spalten und eine Gewichtung von 5 (100%/5 = > 20% --> also nur in 20% Schritten)
Excel soll dann alle möglichen Verteilungen automatisch anzeigen:
Z.B.
0 100%
20% 80%
60% 40%
80% 20%
100% 0%

Dies wäre das Ergebnis bei 2 Spalten und eine Gewichtung von 5.
Wäre es z.B. eine Gewichtung von 10, dann wären es 10% Schritte (100%/10).

0 100%
10% 90%
20% 80%
30% 70%
40% 60%
50% 50%
60% 40%
70% 30%
80% 20%
90% 100%

Hoffe diesesmal ist es verständlicher. Würde mich über jede Hilfe freuen.

Liebe Grüße

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hier nochmals das Problem. Ich muss sozusagen 100% auf
verschiedene Spalten aufteilen, wobei von Excel dann alle
Möglichkeiten angezeigt werden sollten, wichtig ist alle
Möglichkeiten.
Um die 100% aufzuteilen, muss ich zuerst mal festlegen auf
wieviele Spalten diese aufgeteilt werden sollen und mit
welchen Gewichtungen.

Hallo Rob,

okay, jetzt habe ich das für 2 Spalten verstanden.

Wie sieht das jetzt für mehr Spalten aus?

Gruß
Reinhard

Hallo Reinhard,

also angenommen eine gewichtung von 5 (100%/5 -> 20% Schritten) bei 3 Spalten wäre dann z.b.b:

0% 0% 100%
0% 20% 80%
0% 40% 60%
0% 60% 40%
0% 80% 20%
0% 100% 0%
20% 0% 80%
40% 0% 60%
60% 0% 40%
80% 0% 20%
100% 0% 0%
80% 20% 0%
60% 40% 0%
40% 60% 0%
20% 80% 0%
0% 100% 0%

So ich hoffe ich hab jetzt alle Möglichkeiten bei 3 Spalten und einer 5 Gewichtung aufgezählt. Jedenfalls die Summe pro Zeile muss immer 100% ergeben und es sollen alle Möglichkeiten dargestellt werden.
Bei vier Spalten wäre das Prinzip das Gleiche System.

Liebe Grüße aus Wien…
Rob

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Kombinationen in Excel Vba

So ich hoffe ich hab jetzt alle Möglichkeiten bei 3 Spalten
und einer 5 Gewichtung aufgezählt. Jedenfalls die Summe pro
Zeile muss immer 100% ergeben und es sollen alle Möglichkeiten
dargestellt werden.

Hallo Rob,

aha, sieht nach Kombinationen aus, also rekursive Lösung oder Schleifen in Schleifen.
Hier mal als Ansatz, nur für 2 Spalten:

Sub gewichtung()
Dim Eing As Variant, Stufe As Integer, N As Integer, Zei As Long
On Error GoTo Ende
Range("A:B").ClearContents
Eing = InputBox("Stufe eingeben als zahl")
Stufe = CInt(Eing)
For N = 0 To 100 Step 100 / Stufe
 Zei = Zei + 1
 Range("A" & Zei) = N
 Range("B" & Zei) = 100 - N
Next N
Ende:
End Sub

Gruß
Reinhard

So ich hoffe ich hab jetzt alle Möglichkeiten bei 3 Spalten
und einer 5 Gewichtung aufgezählt. Jedenfalls die Summe pro
Zeile muss immer 100% ergeben und es sollen alle Möglichkeiten
dargestellt werden.

Hallo Rob,

wie wäre es damit:

Sub gewichtung()
Dim Eing As Variant, Stufe As Integer, N As Integer, Zei As Long, Spa As Integer
Dim St1, St2
On Error GoTo Ende
ActiveSheet.UsedRange.ClearContents
Eing = InputBox("Stufe eingeben als zahl")
Stufe = CInt(Eing)
Eing = InputBox("Spaltenanzahl eingeben als zahl")
Spa = CInt(Eing)
For St1 = 1 To Spa - 1
 For St2 = St1 + 1 To Spa
 For N = 0 To 100 Step 100 / Stufe
 Zei = Zei + 1
 Cells(Zei, St1) = N
 Cells(Zei, St2) = 100 - N
 Next N
 Next St2
Next St1
Ende:
End Sub

Gruß
Reinhard

Hi Rob,

So ich hoffe ich hab jetzt alle Möglichkeiten bei 3 Spalten
und einer 5 Gewichtung aufgezählt…

was mit den
40,40,20
40,20,40
20,40,40
?

LG Alex

Hi Alex,

was mit den
40,40,20
40,20,40
20,40,40
?

die sind der Grund, warum eine Softwarelösung gesucht wird.

Gruß Rainer

Lösung…
Hi Rob (?),

hier ein bisschen Code, kannste ja noch anpassen,
sollte jedoch in etwa das tun, was Du erwartest…

For-Next-Schleifen sind dazu leider nicht geeignet
(wäre ja auch zu einfach), da Du die Spaltenanzahl
ja dynamisch ändern willst. Deshalb simuliere ich
einfach beliebig viele ineinanderverschachtele
(LOL gibts das Wort überhaupt?) For-Next-Schleifen,
der Rest sollte klar sein.

Viel Spaß

Const Schritt = 10
Const SpAnz = 3

Sub CalcTab()
 Dim z(SpAnz), s, sa, ze, su As Integer
 Dim fertig As Boolean

 fertig = False
 ze = 1
 For s = 1 To SpAnz
 z(s) = 0
 Next s

 Do
 s = SpAnz
 Do
 If z(s) = 100 Then
 If s = 1 Then
 fertig = True
 End If
 z(s) = 0
 Else
 z(s) = z(s) + Schritt
 s = 1
 End If
 s = s - 1
 Loop Until s = 0

 'Zahlen addieren
 su = 0
 For s = 1 To SpAnz
 su = su + z(s)
 Next s

 'wenn 100 dann mögliche Aufteilung in Tabelle eintragen
 If su = 100 Then
 For s = 1 To SpAnz
 Cells(ze, s) = z(s)
 Next s
 ze = ze + 1
 End If

 Loop Until fertig
End Sub

Hallo Reinhard,

wow, also ich bin immer wieder beeindruckt, wir kurz die Makros sein können :smile:
jedenfalls es funktioniert super, aber leider werden nicht alle möglichkeiten aufgelistet. zwar werden z.B. bei einer gewichtung von 5 (also 20 Schritte) und z.b 3 Spalten alle Variationen der einzelnen Spalten zueinander aufgelistet, jedoch nicht jene wo alle 3 miteinander verbunden werden…
z.B Gewichtung 5 und 3 Spalten würde noch hinzukommen
20 40 40
20 20 60
20 60 20
40 40 20
40 20 40

etc…

also ich hab noch zig-foren abgeklappert, aber irgendwie so ein
spezielles problem hatte noch keiner… ojeoje…

liebe grüße

rob

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rob,

jedenfalls es funktioniert super, aber leider werden nicht
alle möglichkeiten aufgelistet. zwar werden z.B. bei einer
gewichtung von 5 (also 20 Schritte) und z.b 3 Spalten alle
Variationen der einzelnen Spalten zueinander aufgelistet,
jedoch nicht jene wo alle 3 miteinander verbunden werden…
z.B Gewichtung 5 und 3 Spalten würde noch hinzukommen
20 40 40
20 20 60
20 60 20
40 40 20
40 20 40
etc…

wieso kommen die jetzt noch dazu? das war aus dem beitrag auf denhin ich den Code entwickelte nicht zu erkennen:frowning:

Klappt denn die Lösung von Alexander?

Wenn nicht, liste mal manuell alles auf was bei Gewichtung 5 und 3 Spalten angezeigt werden soll.
Ggfs. eine Mappe hochladen mit FAQ:2861

also ich hab noch zig-foren abgeklappert, aber irgendwie so
ein
spezielles problem hatte noch keiner… ojeoje…

Bei „Kombinationen“ gibt es ig Variationen. Winzige Änderung der Aufgabenstellung erfordert ggfs. völlig anderen Code.

Gruß
Reinhard

Hallo Rob,

was mich von Anfang an gleich irritiert hat, Gewichtung 10 ist doch bei 14 Spalten gar nicht möglich.
Ich kann doch nicht 100 in Zehnerschritten auf 14 Spalten verteilen.
Wenn dann in 100/14er Schriiten.

Gruß
Reinhard

Hallo Reinhard,

hab leider keine lösung von alex gefunden sondern eben nur eine frage. also hab jetzt auf deinen tipp hin ein excel-sheet hochgeladen mit einem gewichtungsfaktor von 3 und deren möglichen lösungen mit 2, 3 und 4 spalten.
eben wie gesagt dies wäre noch händisch möglich aber sobald der gewichtungsfaktor zunimmt oder die spalten zunehmen, ist das nur noch mit vba lösbar. ich hoffe dieses sheet hilft über meine fast schon peinliche erklärungsversuche hinweg *g*

liebe grüße rob

http://rapidshare.com/files/222443211/vba-problem.xls

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hab leider keine lösung von alex gefunden sondern eben nur
eine frage.

Ist eigentlich kaum zu übersehen, da es der oberste Post ist :wink:

Funktioniert natürlich; auch bei 14 Spalten. Hab auch drauf
geachtet, daß er von rechts anfängt so wie Du in Deinem
ersten Beispiel.
Allerdings solltest Du z.B. bei 14 Spalten und Schrittweite 5 schon
Excel 2007 benutzen, da das einige 100000 Zeilen werden. Alternativ
mußt Du eben immer wenn der Zeilenzähler die 65K-Grenze überschreitest
ein neues Tabellenblatt aufmachen.

LG Alex

Hallo Alex und Rainer,

jedenfalls vielen lieben Dank für Eure Bemühungen und Anregungen. Ihr habt mir echt extrem weiter geholfen weil ich war schon am verzweifeln. Auf alle Fälle hab ich wiedermal gemerkt wie wichtig es ist in VBA fit zu sein. Rainer tut mir nochmals leid, dass ich ein paar Probleme hatte den Sachverhalt exakt zu formulieren.
Kann meinen Freunden dieses Forum nur weiterempfehlen, da einem hier wirklich geholfen wird.

Schönes Wochenende noch und ich hoffe ebenfalls zukünftig meinen Beitrag zu diesem Forum leisten zu können…

Lg Rob

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Leute,

vielen Dank nochmals für die Lösung. Hab jetzt meine Berechnungen drauf aufsetzten können -> yippi…
Leider hat Excel aber nicht genügend Zeilen um eine höher Spaltenanzahl bzw. geringere Gewichtungen zu benutzen.
Ist es möglich, dass Excel nach erreichen der letzten Zeile auf einem neuen Tabellenblatt beginnt?
Hab versuche einen Code von einem Forum einzuarbeiten, jedoch hab ich den Gewichtungsmatrix-Programmcode nicht 100% verstanden um darin aktiv einzugreifen.

Liebe Grüße Robert

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]