Problem mit "einfachem" Excel-Makro

rvt_ek

Grünschnabel
Hi

Ich muss nun zunehmend größere Exceltabellen auswerten und fange deshalb an das mit Makro's zu machen. Allerdings ergeben sich öfters Probleme, da ich in VBA nicht sonderlich bewandert bin.
Also mein Ziel ist folgendes:
Ich hab eine einfache, aber lange Tabelle, in der in Spalte1 "Kategorien" (strings) stehen und dazugehörig in Spalte2 eine Zahl. Ich brauche einmal eine Zählung, wieoft eine Kategorie vorhanden ist und weiterhin den MEDIAN aus den Werten (Spalte2), die zu der jeweiligen Kategorie gehören.
Die Tab. sieht vereinfacht so aus:
Spalte1 ; Spalte2
A ; 5
A ; 7
A ; 3
B ; 6
B ; 9
C ; 10
C ; 2
C ; 3
C ; 7

Ausgegeben soll folgendes:
Spalte1 ; Spalte2 ; Spalte3 (count) ; Spalte4(Median)
A ; 5
A ; 7
A ; 3 ; 3 ; 5
B ; 6
B ; 9 ; 2 ; 7.5
C ; 10
C ; 2
C ; 3
C ; 7 ; 4 ; 5

Da ich recht viele Kategorien habe, ist es recht aufwändig jede Kategorie einzeln abzufragen. Daher wollte ich das so lösen:
Code:
Sub Kategorien_zaehlen()
'
Dim RngA As Range
Dim zeilenpos1 As Integer
Dim zeilenpos2 As Integer


Set RngA = ActiveSheet.Range("A2", Range("A2").End(xlDown))
zeilenpos1 = 0
zeilenpos2 = 0


Do

zeilenpos1 = zeilenpos2 + 1
zeile = zeilenpos1
zaehlerA = 1
    If Cells(zeile, A) = Cells(zeile + 1, A) Then
        zaehlerA = zaehlerA + 1
        zeile = zeile + 1
    Else Cells(zeile, C).Value = zaehlerA
        zeilenpos2 = zeilenpos2 + zaehlerA
        Cells(zeile, D).FormulaR1C2 = "=MEDIAN(R[zeilenpos1]C2, R[zeilenpos2],C2)"
        zeile = zeilenpos2
    End If
Loop While zeilenpos2 < RngA

End Sub

Aber da kommt gleich am Anfang ein "Run-time error '1004' Application-defined or object-defined error" in der Zeile "Set RngA = ActiveSheet.Range("A2", Range("A2").End(xlDown))"
Ob der Rest so funktionieren würde weiss ich auch nicht, weil ich mit dem Fehler nicht so richtig weiterkomme. Inhaltlich gesehn soll das Makro in Spalte1 immer die Zelle mit der darunterliegenden vergleichen und wenn die gleich sind eine Zeile runtergehen, zählen und das ganze nochmal bis die nächste Kategorie anfängt. Hier soll er dann die Anzahl (Zähler) ausspucken und vom Anfang der Kategorie (zeilenpos1) bis zum Ende (zeilenpos2) den Median aus den in Spalte2 stehenden Zahlen berechnen. Danach soll er dasselbe mit der nachfolgenden Kategorie machen.

Hat jemand eine Idee oder ein paar Tipps, das Problem zu lösen? Ich hab praktisch kaum Ahnung von VBA und komme inzwischen selbst nicht mehr weiter

Beste Grüße
Eckart
 
Zuletzt bearbeitet:
Dein Fehler entsteht, weil du ein Range mit einer Integer-Variable vergleichen willst, sowas nimmt Excel-VBA krumm.

Ich hab dir hier deinen Code etwas verbessert, nun funktioniert er bestimmungsgemäß.

Visual Basic:
Sub Kategorien_zaehlen()
 Dim RngA As Integer
 Dim zeilenpos1 As Integer
 Dim zeilenpos2 As Integer
 Dim bLösch As Boolean

 RngA = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
 bLösch = True

 For cnt = 1 To RngA

  If bLösch = True Then zeilenpos1 = cnt: zeilenpos2 = cnt: zaehlerA = 0: bLösch = False
  zaehlerA = zaehlerA + 1
  
  If Cells(cnt, 1) <> Cells(cnt + 1, 1) Then
   Cells(cnt, 3).Value = zaehlerA
   zeilenpos2 = zeilenpos1 + zaehlerA - 1
   Cells(cnt, 4).Formula = "=MEDIAN(B" & zeilenpos1 & ":B" & zeilenpos2 & ")"
   bLösch = True
  End If
 Next cnt

End Sub


Der Doc!
 
Zurück