Hallo zusammen,
hab jetzt schon gefühlt alle Foren durchschaut, aber leider nichts gefunden. Habe folgendes Problem:
Ich habe in Spalte A beliebige Dezimalwerte zu stehen. Diese sollen in Klassen geordnet werden. Aus der Spalte B lese ich folgendes ein: einen Minimumwert (Startwert) , einen Maximumwert (Endwert) und die gewünschte Klassenbreite. Die Ausgabe der Klassen und der Anzahl der Werte im jeweiligen Klassenbereich sollen in den Spalten C und d angezeigt werden. Hierfür nutze ich die CountIfs Funktion. Für ganzzahlige Start und Endwerte klappt das auch super (z.B. Start 0, Ende 6, Breite 1), aber nicht für einen Startwert von 0,5 einen Endwert von 5,6 und eine Klassenbreite von 0,1 will. Kann mir hier Jemand bitte weiterhelfen? Meine Vermutung ist das die CountIf bzw CountIfs Funktion nur mit ganzzahligen Kriterien arbeitet.
Hab mal die Excel mit Bespielwerten in den Anhang gepackt
Der Code mit Kommentaren:
CodeTags gesetzt ~VaporiZed
hab jetzt schon gefühlt alle Foren durchschaut, aber leider nichts gefunden. Habe folgendes Problem:
Ich habe in Spalte A beliebige Dezimalwerte zu stehen. Diese sollen in Klassen geordnet werden. Aus der Spalte B lese ich folgendes ein: einen Minimumwert (Startwert) , einen Maximumwert (Endwert) und die gewünschte Klassenbreite. Die Ausgabe der Klassen und der Anzahl der Werte im jeweiligen Klassenbereich sollen in den Spalten C und d angezeigt werden. Hierfür nutze ich die CountIfs Funktion. Für ganzzahlige Start und Endwerte klappt das auch super (z.B. Start 0, Ende 6, Breite 1), aber nicht für einen Startwert von 0,5 einen Endwert von 5,6 und eine Klassenbreite von 0,1 will. Kann mir hier Jemand bitte weiterhelfen? Meine Vermutung ist das die CountIf bzw CountIfs Funktion nur mit ganzzahligen Kriterien arbeitet.
Hab mal die Excel mit Bespielwerten in den Anhang gepackt
Der Code mit Kommentaren:
Visual Basic-Quellcode
- Sub Klassenordnen()
- ' Dim MinValue As Double 'Deklaration notwendig?! funktioniert mit ganzen zahlen auch ohne
- ' Dim MaxValue As Double
- ' Dim Breite As Double
- ' Dim MaxValueKlasse As Double
- ' Dim MinValueKlasse As Double
- ' Dim KlassenZahl As Double
- 'Variablenwerte einlesen
- MinValue = Worksheets("Daten").Range("B1").Value
- MaxValue = Worksheets("Daten").Range("B2").Value
- Breite = Worksheets("Daten").Range("B3").Value
- KlassenZahl = (MaxValue - MinValue) / Breite
- 'Letzte Reihe finden
- LastRow = Worksheets("Daten").Range("A" & Rows.Count).End(xlUp).Row
- Dim DataRange As Range
- Set DataRange = Worksheets("Daten").Range("A2:A" & LastRow)
- 'Schleife für Klassengrenzen + Sortieren der Werte
- For B = 1 To KlassenZahl
- MaxValueKlasse = MinValue + Breite
- Worksheets("Daten").Range("C" & 1 + B).Value = MaxValueKlasse
- ergebnis = _
- Application.WorksheetFunction.CountIfs(Worksheets("Daten").Range("A2:A" & LastRow), "<=" & MaxValueKlasse, Worksheets("Daten").Range("A2:A" & LastRow), ">=" & MinValue)
- Worksheets("Daten").Range("D" & 1 + B).Value = ergebnis
- MinValue = MaxValueKlasse
- Next
- End Sub
CodeTags gesetzt ~VaporiZed
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()