Live-Forum - Die aktuellen Beiträge
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

VBA Geschwindigkeit / Matrixdarstellung

VBA Geschwindigkeit / Matrixdarstellung
17.10.2005 14:57:42
Florian
Hallo,
ich habe mich heute das erste mal mit VBA beschäftigt, und ein kurzes
Programm geschrieben das folgendes tun sollte: In einer Liste stehen
jeweil die Alterskategorie, eine Variable die die Bildung anzeigt und ein
dritter Wert untereinander. Das Programm soll nun eine Matrix bilden die jeweils
die Summe des 3. Wertes für jede Kombination der anderen beiden bildet.
Also
Orignaliste
1 2 7
1 2 4
2 1 3
2 1 4
sollte folgendes ergeben
1 2
1 0 11
2 7 0
nun funktioniert das zwar, aber das Programm läuft leider !sehr! langsam. Wenn mir jemand ein paar Tipps geben könnte um die Geschwindigkeit zu verbessern wäre ich sehr dankbar. (soll mit einigen tausend Datensätzen funktionieren)
Desweiteren suche ich noch nach einer geigneten Art das Ergebniss anschaulich graphisch darzustellen. Im Idealfall etwa ein Diagramm, das jedes Kästchen der Matrix - je höher der Wert desto dunkler - einfärbt.
Hoffentlich waren das jetzt nicht zu viele Probleme auf einmal!
Vielen, vielen Dank für Eure Hilfe!
mfg
Florian
Den Code habe ich einfach als Textfile angehängt!
https://www.herber.de/bbs/user/27559.txt

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
... ? Hab's nicht verstanden
17.10.2005 15:12:24
gordon
Hi Florian,
habe aber leider inhaltlich nicht verstanden, was Du machen willst. Vielleicht auch meine Tagesform, aber lad' nochmal eine Excel-Beíspieldatei hoch, mit Erklärung, wie sich die Matrizenwerte ergeben sollen.
Gruß
gordon
AW: ... ? Hab's nicht verstanden
17.10.2005 15:21:22
Florian
Hallo,
danke erstmal fürs ansehen hier das komplette XLS:
https://www.herber.de/bbs/user/27563.xls
wg es funktioniert zwar, aber es sollte mit mehren zehntausend datensätzen auch akkzeptabel laufen und dann habe ich noch das Problem der Darstellung
Danke!
lg
Florian
AW: ... ? Hab's nicht verstanden
17.10.2005 15:24:47
Florian
Erklärung vergessen :-)
Also in der 1. Zelle soll die Summe aller Werte (aus Spalte 3) stehen für die gilt Alter = 1 und Bildung = 1, dann daneben eine Summe aller Werte (aus Spalte 3) für die gilt Alter=1 und Bildung = 2 usw.
und darstellen möchte ich das ganze als Diagramm aus Kästchen, deren Farbe dunkler wird je höher die Summe, geht das?
Danke!
lg
Florian
Anzeige
AW: ... ? Hab's nicht verstanden
17.10.2005 15:53:28
gordon
Hi Florian,
so, mal auf die Schnelle - s. Datei
https://www.herber.de/bbs/user/27565.xls
- Application.screenupdating (false/true) dürfte am meisten bringen.
- Zuweisung der Variablen erst, wenn sie wirklich benötigt werden ( b erst, wenn if a = ... erfüllt)
- Value in worksheet erst nach wend, d.h den endgültigen Wert eintragen und nicht innerhalb der Schleife (und damit immer wieder überschreiben).
Wie lange dauert es jetzt ?
Gruß
gordon
Noch'n Vorschlag
17.10.2005 16:02:37
gordon
Hi Florian,
kannst Du die Werte nicht aufsteigend nach Spalte a sortieren ?
Dann immer nur Wechsel in a beachten statt Schleife.
Nochmal zu den Farben: Sättigung sprich Hell/dunkel kennt Excel nicht ;-(
Gruß
gordon
Anzeige
AW: Noch'n Vorschlag
17.10.2005 16:37:08
Florian
Vielen, vielen Dank erstmal für deine Hilfe!
Die Optimierungen bringen spürbar etwas, auch wenn Excel
immer noch keine Rakete ist, lässt sich jetzt damit arbeiten! Danke!
Hast du zur Darstellung vielleicht noch eine Idee?
Wobei die Sättigung könnte man ja mit Kategorien umgehen (Kat 1 = weiss, Kat 2 = helles grau etc) das Problem ist ich weiss nicht wie man in VBA zeichnet bzw geht das mit den integrierten Diagrammen irgendwie? Gibts dazu irgendwo ein Tutorial?
Danke!
lg
Florian
Farbdarstellung
17.10.2005 17:03:29
gordon
Hi Florian,
Was soll denn eigentlich das Ziel sein ? Die Tabelle ist doch eigentlich mit 6 x 6 recht handlich und übersichtlich.
Zellenhintergrund färben sonst
z.B. mit Interior.Colorindex...
range auf Deine Zieltabelle setzen
dim r as range
dim c as range
set r = Worksheets("Tabelle1").range("A1:F6")
for each c in r
select c.value
case 0 to 100
c.Interior.ColorIndex= ?
case...
c.interior.colorindex= ?
end select
next
Liste der gängigen Farbwerte unter der Onlinehilfe von VB, alternativ einfach mal eine Schleife programmieren (oder danach suchen) die jedem Feld den Folgewert zuweist.
Alternativ: Excel kann auch RGB-Werte darstellen, allerdings müsstest Du Dich mal darum kümmern, wie sich Sättigungsgrade in RGB-Änderungen niederschlagen.
Gruß
gordon
Anzeige
Schaue mal drauf
17.10.2005 15:25:21
gordon
Hi Florian,
Darstellung über Einfärben: Excel (zumindest in meiner Version 9.) kann keine Sättigungsgrade, unterschiedlich hell/dunkel ginge so nicht. Geht das bei 2003 ?
Verschiedene Farben, z.B. ab / bis bestimmtem Schwellwert wären möglich.
Vorschläge zur Codeverbesserung ( sofern aus meiner Sicht möglich ) kommen noch...
Gruß
gordon
AW: VBA Geschwindigkeit / Matrixdarstellung
18.10.2005 10:07:20
GerdZ
Hallo Florian,
die Zeit geht verloren, weil Du für jedes mögliche Wertepaar (Alter/Bildung) die komplette Datentabelle durchsuchst (=36x) und bei jedem dieser Durchläufe jede Zahl in eine String-Variable konvertiert wird. Bei Übereinstimmung der Wertepaare wird dann auch noch die String-Variable in eine Double-Variable konvertiert.
Falls für die Altersgruppen nur ganze Zahlen von 1 bis 6 und für die Bildungsvariable ebenfalls nur ganze Zahlen von 1 bis 6 in Frage kommen, kann man die Summen auch in einem Durchlauf ermitteln:

Sub Makro1()
Const max_x As Integer = 6 'Altersgruppen
Const max_y As Integer = 6 'Bildung
Dim tmpArray(1 To max_x, 1 To max_y) As Integer
Dim laufzeile As Integer
laufzeile = 3
Worksheets("test2").Select
Do While Not IsEmpty(Cells(laufzeile, 1).Value)
tmpArray(Cells(laufzeile, 1).Value, Cells(laufzeile, 2).Value) = _
tmpArray(Cells(laufzeile, 1).Value, Cells(laufzeile, 2).Value) + Cells(laufzeile, 3).Value
laufzeile = laufzeile + 1
Loop
Worksheets("Tabelle1").Select
Range(Cells(1, 1), Cells(max_x, max_y)) = tmpArray
End Sub
Gruß
Gerd
Anzeige
AW: VBA Geschwindigkeit / Matrixdarstellung
18.10.2005 16:30:09
Florian
DANKE!!!!
Der Code ist sehr schnell, vielen Dank!
Eine Frage nur: Er überschreibt immer die Ausgangsdaten, wie kann ich das ändern?
lg
Florian
AW: VBA Geschwindigkeit / Matrixdarstellung
18.10.2005 18:58:20
Florian
Ich schaffe es leider nicht die Ausgabe umzuleiten, daherwieder geöffnet :-(
AW: VBA Geschwindigkeit / Matrixdarstellung
19.10.2005 16:06:13
GerdZ
Hallo Florian,
statt
    Worksheets("Tabelle1").Select
Range(Cells(1, 1), Cells(max_x, max_y)) = tmpArray
mußt Du

With Worksheets("erg")
.Range(.Cells(3, 2), .Cells(max_x + 2, max_y + 1)) = tmpArray
End With
schreiben.
Gruß
Gerd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige