Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
680to684
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenmatrix berechnen

Datenmatrix berechnen
18.10.2005 18:44:10
Kelle
Hallo liebe Leute,
ich habe folgendes Problem. Ich habe eine Datenmatrix, wie in der Abbildung (ganz unten; warum da so viel Platz ist, weiß ich auch nicht). Dabei sind die Buchstaben A bis D konstante Werte (z.B. Atommassen). Ich möchte nun alle möglichen Kombinationen auf ein Tabellenblatt (oder File) schreiben, die innerhalb zuvor festgelegter Grenzen liegen. Um Rechenzeit zu sparen (die Datenmatrix ist in der Realität viel größer), dachte ich daran den Spaltendurchlauf immer dann abzubrechen, wenn die Summe einer Kombination größer der Obergrenze liegt. Wenn sie innerhalb der Grenze liegt muss sie ausgegeben werden, wenn sie unterhalb der Grenze liegt soll weiter probiert werden. Zuerst würde ich die erste Spalte rückwärts von dem Punkt aus durchlaufen, der gerade innerhalb oder unter der eingegebenen Wert liegt und dann die anderen Spalten vorwärts, bis der Wert zu hoch ist.
Leider kann ich das bisher nicht in VB oder VBA umsetzen. Kann mir jemand mit etwas Code auf die Sprünge helfen?
Wenn jemand ne Idee hat, das Ganze schneller und effizienter zu machen, nur raus damit.
Danke euch vielmals im Voraus
Kelle






































0



0



0



0



1 * A



1 * B



1 * C



1 * D



2 * A



2 * B



2 * C



2 * D



3 * A



3 * B



3 * C



3 * D



4 * A



4 * B



4 * C



4 * D



5 *A



5 *B



5 *C



5 *D



3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenmatrix berechnen
19.10.2005 00:55:08
Erich
Hallo Kelle (?),
den Inhalt deiner Datenmatrix verstehe ich nicht so recht. Zunächst sieht das aus wie eine einfache Multiplikationstabelle. Da du von einer großen Datenmatrix sprichst, gehe ich aber davon aus, dass sich die Werte der Tabelle nicht durch einfache Multiplikationen ergeben, sondern gemessen sind oder einen anderen Ursprung haben.
Oder ist die Aufgabe so zu verstehen:
Du gibst 4 Werte/Atommassen (A bis D) und eine Obergrenze OG für das Gesamtgewicht vor. Dann suchst du alle Kombinationen von nicht negativen ganzen Zahlen (n1 bis n4), bei denen
A*n1 + B*n2 + C*n2 + D*n4
die Obergrenze nicht überschreitet.
Dabei wäre eine Ausgangs-Datenmatrix überflüssig.
Die VBA-Lösungen sind nicht so sehr abhängig von der Interpretation der Datenmatrix. Das folgende Beispiel geht von in einer großen Tabelle vorgegebenen Werten aus.
Daten (hier nur die ersten Zeilen)
 ABCD
10000
2123,456789,012225,588113,399
3246,9121578,024451,176226,798
4370,3682367,036676,764340,197
5493,8243156,048902,352453,596
6617,283945,061127,94566,995
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
In der folgenden Tabelle werden die Obergrenze angegeben und die jewiligen Max-Werte für A bis D gerechnet. Die grün unterlegten Zellen werden dann von VBA verwendet, der Rest ist nur zur Info.
Vorgaben
 ABCDEFG
1 ABCD Obergrenze
2Wert123,456789,012225,588113,399 9876,543
3       
4Max. in Zeile81134488  
5       
6max. Wert9876,489468,1449700,2849865,713  
Formeln der Tabelle
B4 : =VERGLEICH($G2;Daten!A1:A1000)
C4 : =VERGLEICH($G2;Daten!B1:B1000)
D4 : =VERGLEICH($G2;Daten!C1:C1000)
E4 : =VERGLEICH($G2;Daten!D1:D1000)
B6 : =INDEX(Daten!A1:A1000;B4)
C6 : =INDEX(Daten!B1:B1000;C4)
D6 : =INDEX(Daten!C1:C1000;D4)
E6 : =INDEX(Daten!D1:D1000;E4)
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Im Ergebnis erscheinen die Kombinationen, wobei für Spalte D nicht alle, sondern nur der jeweils maximale Wert ausgegeben wird - es wird sonst einfach zu viel. Hier wiedergegeben sind nur die ersten und die letzten Zeilen und einige dazwischen. In Spalte A bis D stehen die "Anzahlen" für A bis D, in Spalte E bis H die Werte aus der Datenmatrix und in Spalte I steht die Summe, die immer unter der Obergrenze liegen sollte:
Erg
 ABCDEFGHI
1000870009865,7139865,713
20018500225,5889638,9159864,503
30028300451,1769412,1179863,293
4400431009700,284113,3999813,683
45010800789,01209071,929860,932
46011780789,012225,5888845,1229859,722
47012760789,012451,1768618,3249858,512
84013920789,0128797,932226,7989813,742
85014000789,0129023,5209812,532
860207301578,02408278,1279856,151
870217101578,024225,5888051,3299854,941
880226901578,024451,1767824,5319853,731
8631780029629,56800226,7989856,366
8632780109629,5680225,58809855,156
8633790019753,02400113,3999866,423
8634800009876,480009876,48
 
Diagramm - Grafik - Excel Tabellen einfach im Web darstellen    Excel Jeanie HTML  3.0    Download  
Berechnet wurde das Ergebnis mit der (sicher nicht laufzeitoptimalen) Prozedur
Sub Komb_Max() Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, zz As Long Dim OG As Double, sum(1 To 4) As Double OG = Sheets("Vorgaben").Range("G2") Sheets("Erg").Select With Sheets("Daten") For n1 = 1 To Sheets("Vorgaben").Range("B4") sum(1) = .Cells(n1, 1) If sum(1) > OG Then Exit For For n2 = 1 To Sheets("Vorgaben").Range("C4") sum(2) = sum(1) + .Cells(n2, 2) If sum(2) > OG Then Exit For For n3 = 1 To Sheets("Vorgaben").Range("D4") sum(3) = sum(2) + .Cells(n3, 3) If sum(3) > OG Then Exit For zz = zz + 1 If zz >= Rows.Count Then Stop For n4 = 1 To Sheets("Vorgaben").Range("E4") sum(4) = sum(3) + .Cells(n4, 4) If sum(4) > OG Then Exit For Cells(zz, 1) = n1 - 1 Cells(zz, 2) = n2 - 1 Cells(zz, 3) = n3 - 1 Cells(zz, 4) = n4 - 1 Cells(zz, 5) = .Cells(n1, 1) Cells(zz, 6) = .Cells(n2, 2) Cells(zz, 7) = .Cells(n3, 3) Cells(zz, 8) = .Cells(n4, 4) Cells(zz, 9) = sum(4) Next n4 Next n3 Next n2 Next n1 End With End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datenmatrix berechnen
19.10.2005 06:41:14
Erich
Hallo Kelle,
im vorigen Beitrag hatte ich ja schon geschrieben, dass der Code sich nicht laufzeitoptimiert ist. Er ist vielmehr ein schönes Beispiel dafür, wie man einen PC mehrere Minuten lang sinnlos rechnen lassen kann.
Der folgende Code produziert das gleiche Ergebnis in weniger als 1/50 der Zeit. (Beim alten Code konnte man derweil eine Kanne Kaffee kochen, jetzt ist nur noch Zeit für einen Schluck aus der Tasse...)
Sub Komb_Max2() Dim n1 As Long, n2 As Long, n3 As Long, n4 As Long, zz As Long Dim OG As Double, sum(1 To 4) As Double, sp4 As Range Cells(1, 10) = Time OG = Sheets("Vorgaben").Range("G2") Sheets("Erg").Select Application.EnableEvents = False Application.ScreenUpdating = False Application.Calculation = xlManual With Sheets("Daten") Set sp4 = .Range(.Cells(1, 4), .Cells(Sheets("Vorgaben").Range("E4"), 4)) For n1 = 1 To Sheets("Vorgaben").Range("B4") sum(1) = .Cells(n1, 1) If sum(1) > OG Then Exit For For n2 = 1 To Sheets("Vorgaben").Range("C4") sum(2) = sum(1) + .Cells(n2, 2) If sum(2) > OG Then Exit For For n3 = 1 To Sheets("Vorgaben").Range("D4") sum(3) = sum(2) + .Cells(n3, 3) If sum(3) > OG Then Exit For zz = zz + 1 If zz >= Rows.Count Then Stop n4 = WorksheetFunction.Match(OG - sum(3), sp4) sum(4) = sum(3) + .Cells(n4, 4) Cells(zz, 1) = n1 - 1 Cells(zz, 2) = n2 - 1 Cells(zz, 3) = n3 - 1 Cells(zz, 4) = n4 - 1 Cells(zz, 5) = .Cells(n1, 1) Cells(zz, 6) = .Cells(n2, 2) Cells(zz, 7) = .Cells(n3, 3) Cells(zz, 8) = .Cells(n4, 4) Cells(zz, 9) = sum(4) Next n3 Next n2 Next n1 End With Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.EnableEvents = True Cells(2, 10) = Time Cells(3, 10) = Round((Cells(2, 10) - Cells(1, 10)) * 86400, 0) & " Sek" End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Datenmatrix berechnen
19.10.2005 10:08:18
Kelle
Hallo Erich,
vielen Dank ersteinmal für deine schnelle und ausführliche email. Ich muss allerdings jetzt erstmal Zeit haben, um das Ganze zu durchschauen und zu verstehen. Das wird aller Voraussicht nach bis zum WE dauern, da hier auf der Arbeit im Moment viel zu tun ist.
Danke und ich melde mich dann, wenn ich wieder im Thema bin.
Kelle

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige