Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1240to1244
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
Inhaltsverzeichnis

Matrix ausfüllen

Matrix ausfüllen
Stefan
Liebe Experten,
ich versuche gerade, die Auswertung einer Testdatenbank (hier in A1:B10) zu erstellen. Ziel ist es, eine zweidimensionale Tabelle zu füllen. In den Zeilen stehen die Testfallgruppen (hier in Spalte D2:D4) und in den Spalten stehen die Teststatus (hier in E1:G1). In die Felder E2:G4 sollen nun die Anzahl der Testfälle eingetragen werden, die zu der entsprechenden Testfallgruppe gehören und den in der Spalte benannten Status haben.
https://www.herber.de/bbs/user/77807.xls
Mit folgendem Code klappt das auch sehr gut (u.a. dank der Hilfe von Uwe (:o)):

Sub count_me()
With ActiveSheet
.Range("E2").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D2))=(D2))*((B1:B10)=E1))"
.Range("F2").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D2))=(D2))*((B1:B10)=F1))"
.Range("G2").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D2))=(D2))*((B1:B10)=G1))"
.Range("E3").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D3))=(D3))*((B1:B10)=E1))"
.Range("F3").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D3))=(D3))*((B1:B10)=F1))"
.Range("G3").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D3))=(D3))*((B1:B10)=G1))"
.Range("E4").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D4))=(D4))*((B1:B10)=E1))"
.Range("F4").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D4))=(D4))*((B1:B10)=F1))"
.Range("G4").Formula = "=SUMPRODUCT((LEFT(A1:A10,LEN(D4))=(D4))*((B1:B10)=G1))"
End With
End Sub

Um den Code auch wirklich nutzen zu können, müsste er aber auch für größere und komplexere Tabellen geeignet sein. In der vorliegenden Version muss ich aber für jede Kombination von Testfallgruppen Status eine eigene Zeile Code hinzufügen.
Frage: Wie könnte eine elegante Lösung mit möglichst wenig Code-Redundanzen aussehen, die auch möglichst wenig Arbeitsschritte braucht?
PS: Eine vollständige Lösung wäre toll. Ich würde mich aber schon über Hinweise zu einem Lösungsansatz freuen.
Danke und Gruß
Stefan Jäschke

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Formel in Bereich schreiben - VBA
04.12.2011 01:36:54
Erich
Hi Stefan,
mit "Matrix" hat das nichts zu tun - du möchtest eine Formel in einen Zellbereich schreiben.
Versuch mal:

Sub Makro1()
Cells(2, 5).Resize(3, 3).Formula = _
"=SUMPRODUCT((LEFT($A$2:$A$13,LEN($D2))=$D2)*($B$2:$B$13=E$1))"
' oder
Cells(2, 5).Resize(3, 3).FormulaLocal = _
"=SUMMENPRODUKT((LINKS($A$2:$A$13;LÄNGE($D2))=$D2)*($B$2:$B$13=E$1))"
' oder
Range(Cells(2, 5), Cells(4, 7)).Formula = _
"=SUMPRODUCT((LEFT($A$2:$A$13,LEN($D2))=$D2)*($B$2:$B$13=E$1))"
' oder
Range("E2:G4").Formula = _
"=SUMPRODUCT((LEFT($A$2:$A$13,LEN($D2))=$D2)*($B$2:$B$13=E$1))"
End Sub
Eine Frage zu deinem Code:
Wozu dient das "With ActiveSheet"? Du hast den Code im Modul der Tabellenblatts stehen.
Das bewirkt, dass er auf das Code-Tabellenblatt wirkt, wenn kein anderes Blatt refenziert wird.
Du refenzierst nun mit "ActiveSheet".
Mit "ActiveSheet" ist hier vermutlich nur das Blatt gemeint, in dem der Code steht, oder?
Tatsächlich werden durch "With ActiveSheet" Zellen aber auf demjenigen Blatt angesprochen,
das (zufällig) gerade aktiv ist.
Wenn aber der Code auch für andere Blätter genutzt werden soll,
ist wäre er vermutlich besser in einem allg. Modul ("Modul1") untergebracht.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Formel in Bereich schreiben - VBA
04.12.2011 12:58:02
Stefan
Hallo Erich,
vielen Dank für deine schnelle Hilfe. Ich habe die dritte Variante übernommen und diese inzwischen auch erfolgreich in mein produktives Excelsheet übernommen. Dieses war noch komplexer und nun habe ich ein übersichtliches und erweiterbares Macro. Vielen Dank dafür!
Zu deiner Frage: Ich muss zugeben, dass ich eigentlich nicht vorhatte mich mit VBA zu beschäftigen. Anfang letzter Woche hatte ich ein Problem zu lösen und habe mich dann direkt in den Code gestürzt. Die Zeile "With ActiveSheet" ist daher ein Copy, Shake & Paste Überbleibsel. Inzwischen bin ich aber sehr begeistert von den VBA-Möglichkeiten und werde mich daher mit den Grundlagen auseinander setzen. Die angesprochene Zeile habe ich vorerst durch "With Worksheets ("Cockpit")" ersetzt.
Nochmals vielen Dank.
Gruß Stefan
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige