AW: Statistik
15.08.2006 11:08:30
ingUR
In de Tat, Walter,
wie schon Hans bemerkte, eine unglückliche Gestaltung der Tabelle, um sie für eine Schleifenprogrammierung zu nutzen, zumal, wenn an mögliche Erwiterungen denkt.
Darüber hinaus habe ich, wenn ich denn aufmerksam geschaut habe, stimmt die überschrifenanzahl auf Tabelle 2 (A2:S2 = 19) nicht der Anzahl der Felder überein, die in der Tabelle 1 mit roter Schriftfarbe gefüllt sind (=1 + 2*8 + 1 = 18).
strArd = Array("A4", _
"F8,D8", _
"J8,H8", _
"N8,L8", _
"F16,D16", _
"J16,H16", _
"F24,D24", _
"J24,H24", _
"N28, A1", _
"N14, N16")
Diese Zuweisung an eine Feldvariable enthalt also die Zellenadressen der Tabelle 1, deren Inhalt nach Tabelle 2 hin übertragen werden sollen. Erweiterungen und Äderungen sind hier möglich, wobei die Reihenfolge die Ausgabereighenfolge in der Tabelle 2 bestimmt.
Das Zellenpaar "N28,A1" deutet mit A1 auf den fehlenden Bezug.
Unglücklich beim programmgesteuerten Löschen von Zelleninhalte, erweist sich auch die verbundenen Zelle A4:B6. Darüber hinaus ist zu beachten, dass Zelle N16 mit auf den Inhalt von A20 Bezug nimmt.
Der Prozedurcode lautet:
Dim ws2 As Worksheet
Dim c As Range, rng1 As Range
Dim item As Integer, newR As Integer
Dim strAdr() As String, strRngAdr As String
strArd = Array("A4", _
"F8,D8", _
"J8,H8", _
"N8,L8", _
"F16,D16", _
"J16,H16", _
"F24,D24", _
"J24,H24", _
"N28, A1", _
"N14, N16")
For item = 0 To UBound(strArd)
strRngAdr = strRngAdr + strArd(item) + ","
Next item
strRngAdr = Left(strRngAdr, Len(strRngAdr) - 1)
Set rng1 = Range(strRngAdr)
Set ws2 = Worksheets("Tabelle2")
item = 0
newR = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row + 1
For Each c In rng1
item = item + 1
ws2.Cells(newR, item).Value = c
If item > 1 Then
c.ClearContents
Else
Range("A4:B6").ClearContents
End If
Next
Set ws2 = Nothing
Set rng1 = Nothing
End Sub
Nun kommt es darauf an wie Du die Prozedur aufrufen willst. Als Makro-Aufruf ([F8]) fügst Du ein Modul in die Arbeitsmappe ein und vergibst einen Aufrufnamen:
Sub Statistik()
End Sub
Den Code copierst Du zwischen die beiden Prozedurbegrenzungszeilen.
Da Di das Feld "Speichern" auf Deiner Arbeitsmappe angelegt hast, scheinst Du den Weg über eine Schaltfläche vorzuziehen. Lege also ein CommandButton aus der Werkzeugkiste auf dem Tabellenblatt 1 an. Im Entwurfmodus (Ziehquadrate sin auf dem Rand des Steuerelemetes zu sehen) mit Rechtsklick die Eigenschaften aufrufen und unter der Eigenschaft "Caption" den gewünschten Sichtnamen auf der Schaltfläche eingeben.
Noch im Entwurfsmodus, nun ein Doppelklick auf dei Schaltfläche und das VBA-Fenster geht auf und die Prozedurbegrezungszeilen werden geschriebe (wenn bereits vorhanden, wird in diese Prozedur zum Editieren gesprungen):
Private Sub CommandButton1_Click()
End Sub
Der Programmcode ist nun hier einzufügen.
Auf dem Arbeitsblatt ist der entwurfsmodus auszuschalten und die Schatfläche sollte auf Klick reagieren.
Viel Erfolg.
Uwe