4.8k Aufrufe
Gefragt in Tabellenkalkulation von
hallo,

ich bräuchte etwas Hilfe zum Zählen von Zahlen mit VBA


- Die Zahlen 1 bis 49 stehen mehrfach in dem Bereich DW1:FS20

Nun soll gezählt werden wie oft die Zahl 1 vorkommt - wie oft die Zahl 2 vorkommt usw. bis zur Zahl 49

Wenn diese Werte bekannt sind soll absteigend sortiert werden
und im Bereich DW22:FS22 ausgegeben werden.

Also z.B.
49 20 12 4 16 usw.

49 steht in DW22 da diese am häufigsten vorgekommen ist
20 steht in DX22 da diese am zweit häufigsten vorgekommen ist
usw.

Kann mir hier jemand BITTE helfen?

Danke vorab

Sarah

22 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Sarah ^^

der wert 0 stiftete die Verwirrung

korrigiert

gruss nighty

Sub Zaehlen1()
Dim IndexX As Variant, ZahlenX As Variant, Zelle As Variant
Dim DeinBereich As Range, DeineAusgabe As Range
Set DeinBereich = Range("DW1:FS20")
Set DeineAusgabe = Range("DW22:FS22")
DeineAusgabe.Clear
IndexX = DeineAusgabe
ZahlenX = DeinBereich
For Each Zelle In ZahlenX
If Zelle > 0 Then IndexX(1, Zelle) = IndexX(1, Zelle) + 1
Next Zelle
Range("DW22:FS22") = IndexX
End Sub
0 Punkte
Beantwortet von
hallo nighty


super - jetzt bekomme ich zumindestens mal etwas angezeigt
im Bereich DW22:FS22


In meiner Beispielmappe ist nun z.B.
die Zahl 12 fünfzehn mal vorgekommen (also die häufigste)
die Zahl 18 vierzehn mal vorgekommen (zweit häufigste)
die Zahl 47 vierzehn mal vorgekommen usw.
usw.


Wie bekomme ich nun die echten Zahlen (z.B. 12 18 47 usw.)
absteigend waagerecht von links nach rechts in dem Bereich DW22:FS22
angezeigt?

Derzeit stehen dort ja nur die Häufigkeiten - mit deinem Vorschlag

LG
Sarah
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Sarah ^^

fehlt noch die Sortierung

gruss nighty

Sub Zaehlen1()
Dim IndexX As Variant, ZahlenX As Variant, Zelle As Variant
Dim DeinBereich As Range, DeineAusgabe As Range
Set DeinBereich = Range("DW1:FS20")
Set DeineAusgabe = Range("DW22:FS22")
DeineAusgabe.Clear
IndexX = DeineAusgabe
ZahlenX = DeinBereich
For Each Zelle In ZahlenX
If Zelle > 0 Then IndexX(1, Zelle) = IndexX(1, Zelle) + 1
Next Zelle
For Each Zelle In DeineAusgabe
Zaehler = Zaehler + 1
Range(Zelle.Address) = Zaehler
Next Zelle
Range("DW23:FS23") = IndexX
End Sub
0 Punkte
Beantwortet von
hallo nighty


nochmals DANKE

habe es getestet.

Hm..... das hätte wie gesagt sein sollen:

Ich brauche ja nur die reinen Werte aus ("DW1:FS20")
aber halt absteigend sortiert angezeigt im Bereich ("DW22:FS22")

Ich meine damit das die Zahl die am häufigsten in ("DW1:FS20") vorkommt
das diese Zahl in DW22 steht

Die Zahl die im Bereich ("DW1:FS20") als zweithäufigste vorkommt
das diese in DX22 steht

usw.

Das meine ich mit der Ausgabe im Bereich ("DW22:FS22")


LG
Sarah
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Sarah,

teste mal meinen Vorschlag.

Download

Gruß
Rainer
0 Punkte
Beantwortet von
hallo Rainer,

danke für dein Hilfsangebot

Bekomme jedoch hier gleich eine Fehlermeldung

Variable nicht definiert
xlSortOnValues


LG
Sarah
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Sarah,

hatte das Makro in Excel 2010 erstellt, deshalb der Fehler.

Jetzt sollte es funktionieren.

Download

Gruß
Rainer
0 Punkte
Beantwortet von
hallo Rainer,

ja das ist nun eine gute Lösung. Damit kann ich arbeiten
Auch danke für die bedingte Formatierung.

Nochmals vielen lieben Dank für die große Hilfe von dir und nighty

Ihr seid wirklich --- super !!!

Drücke euch beide :-)


Nochmals danke

LG
Sarah
0 Punkte
Beantwortet von
hallo Rainer,

ich muss nochmals etwas nachfragen zu deinem letzten VB Code.


In der Zeile 23 wird ja die "Anzahl" ausgegeben
und in der Zeile 22 die "Zahlen" dazu.

Was müsste am VB Code verändert/ergänzt werden,
damit keine "Anzahl" von Null angezeigt wird - ebenso
die "Zahlen" die eine Null an "Anzahl" haben nicht angezeigt
werden?


LG
Sarah
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Sarah,

so müsste es funktionieren

Option Explicit

Private Sub CommandButton1_Click()
Dim intI As Integer
Application.ScreenUpdating = False
Range("DW22:FS23").ClearComments
For intI = 127 To 175
Cells(22, intI).Value = intI - 126
With Cells(23, intI)
.Value = WorksheetFunction.CountIf(Range("DW1:FS20"), Cells(22, intI).Value)
.NumberFormat = "[=0]"""";General"
End With
Next
Range("DW22:FS23").Select
Selection.Sort Key1:=Range("DW23"), Order1:=xlDescending, Header:=xlGuess
Range((Cells(22, 126 + WorksheetFunction.CountIf(Range("DW23:FS23"), ">0") + 1)), (Cells(22, 175))).ClearContents
Range("DV1").Select
End Sub


Gruß
Rainer
...