Alles ist möglich ;-)
Option Explicit
Public daten As Collection
Public import As Range
Public auswertung As Range
Public pos_aus As Long
Public adrTeilErg() As Variant
Sub teilsummen()
Set import = Sheets("Import").Range("A1")
Set auswertung = Sheets("Auswertung").Range("A1")
Set daten = New Collection
ReDim adrTeilErg(1)
adrTeilErg(1) = ""
pos_aus = 1
auslesen einlesen
Set import = Nothing
Set auswertung = Nothing
Set daten = Nothing
End Sub
Function einlesen()
Dim einZeil As Long
Dim aktzeil As String
einZeil = 1
aktzeil = import.Cells(einZeil, 1).Value
While aktzeil <> ""
On Error Resume Next
aktzeil = daten(aktzeil)
If Err.Number <> 0 Then
daten.Add aktzeil, aktzeil
End If
einZeil = einZeil + 1
aktzeil = import.Cells(einZeil, 1).Value
Wend
einlesen = einZeil - 1
End Function
Function auslesen(elemente)
Dim head As Long
Dim data As Long
Dim akt As Double
Dim vonAdr As Long
vonAdr = 1
For head = 1 To daten.Count
For data = 1 To elemente
If CStr(import.Cells(data, 1).Value) = CStr(daten(head)) Then
akt = import.Cells(data, 2).Value
out auswertung.Cells(pos_aus, 1).Address, "'" & CStr(daten(head)), 0
out auswertung.Cells(pos_aus, 2).Address, akt, 0
pos_aus = pos_aus + 1
End If
Next
out auswertung.Cells(pos_aus, 1).Address, "'" & CStr(daten(head)), 1
out auswertung.Cells(pos_aus, 2).Address, 0, 1, vonAdr
vonAdr = auswertung.Cells(pos_aus, 2).Row + 2
pos_aus = pos_aus + 2
Next
pos_aus = pos_aus + 1
out auswertung.Cells(pos_aus, 1).Address, "Gesamt", 2
out auswertung.Cells(pos_aus, 2).Address, 0, 2
End Function
Function out(zelle, wert, linie, Optional vonAdr = "")
Dim last As Long
Dim neu As Long
Dim dl As Long
Dim sumString As String
If vonAdr = "" Then
auswertung.Range(zelle) = wert
Else
last = auswertung.Range(zelle).Row - 1
auswertung.Range(zelle).FormulaR1C1 = "=sum(R" & vonAdr & "C2:R" & last & "C2)"
neu = UBound(adrTeilErg) + 1
ReDim Preserve adrTeilErg(neu)
adrTeilErg(neu - 1) = last + 1
End If
If linie <> 0 Then
With auswertung.Range(zelle)
.Font.Bold = True
.Borders(xlTop).LineStyle = xlContinuous
End With
End If
If linie = 2 Then
auswertung.Range(zelle).Borders(xlEdgeBottom).LineStyle = xlDouble
If auswertung.Range(zelle).Column = 2 Then
sumString = "="
For dl = 1 To UBound(adrTeilErg) - 1
sumString = sumString & "R" & adrTeilErg(dl) & "C2+"
Next
sumString = Mid(sumString, 1, Len(sumString) - 1)
auswertung.Range(zelle).Formula = sumString
End If
End If
End Function
|