VBA-Beispiel 120
mail schreiben
mail schreiben

gefilterte Daten einer Exceltabelle berechnen

Mit einer UserForm sollen die Daten nach Region gefiltert werden.
Nur für die gefilterten Daten sollen dann jeweils Minimum, Maximum und Durchschnitt berechnet werden.
Dim bolFilter As Boolean

Private Sub UserForm_Initialize()
Dim lngZeile As Long, lngLZ As Long
Dim col As New Collection

'Filtermodus merken
bolFilter = ActiveSheet.AutoFilterMode

'letzte Zelle in Spalte A mit Inhalt
lngLZ = Cells(Rows.Count, 1).End(xlUp).Row

On Error Resume Next
  'Einträge aus Spalte A ohne Doppelte ermitteln
  For lngZeile = 2 To lngLZ
    col.Add Cells(lngZeile, 1), Cells(lngZeile, 1)
  Next lngZeile
On Error GoTo 0

'Einträge aus Spalte A ohne Doppelte
'in Listbox eintragen
For lngZeile = 1 To col.Count
  Me.ListBox1.AddItem col(lngZeile)
Next lngZeile

With Me
  .lblMin.Caption = ""
  .lblMax.Caption = ""
  .lblDurchschnitt.Caption = ""
End With

End Sub

Private Sub ListBox1_Click()

'Spalte A filtern
Range("A1").AutoFilter Field:=1, Criteria1:=Me.ListBox1

'Werte nur der SICHTBAREN Zellen Spalte B ermitteln
With Me
  .lblMin.Caption = "Min: " & _
  WorksheetFunction.Min(Columns("B:B").SpecialCells(xlCellTypeVisible))

  .lblMax.Caption = "Max: " & _
  WorksheetFunction.Max(Columns("B:B").SpecialCells(xlCellTypeVisible))

  .lblDurchschnitt.Caption = "Duchschnitt: " & _
  WorksheetFunction.Average(Columns("B:B").SpecialCells(xlCellTypeVisible))
End With

End Sub

Private Sub cmbCancel_Click()

Range("A1").AutoFilter Field:=1

If bolFilter = False Then
  ActiveSheet.AutoFilterMode = bolFilter
End If

Unload Me
End Sub

Download:   vba120.zip