4.5k 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 all ^^

zwei Beispiele :-)

gruss nighty

für einen bereich

Sub Zaehlen1()
Dim IndexX As Variant, ZahlenX As Variant
Dim Zelle As Variant
Range("C2:C50").Clear
IndexX = Range("C2:C50")
ZahlenX = Range("A2:B6")
For Each Zelle In ZahlenX
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1
Next Zelle
Range("C2:C50") = IndexX
End Sub



fuer eine spalte

Sub Zaehlen2()
Dim IndexX As Variant, ZahlenX As Variant
Dim Zelle As Integer
Range("B2:B50").Clear
IndexX = Range("B2:B50")
ZahlenX = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
For Zelle = 1 To UBound(ZahlenX)
IndexX(ZahlenX(Zelle, 1), 1) = IndexX(ZahlenX(Zelle, 1), 1) + 1
Next Zelle
Range("B2:B50") = IndexX
End Sub
0 Punkte
Beantwortet von
hallo nighty,

danke für deine Beispiele.
Wenn ich nun dein Beispiel 1 auf meine Frage anwende
denke ich das es so gemeint ist:

Dim IndexX As Variant, ZahlenX As Variant
Dim Zelle As Variant
Range("DW22:FS22").Clear 'Lösche ersten Ausgabebereich
IndexX = Range("DW22:FS22") 'Erster Ausgabebereich
ZahlenX = Range("DW1:FS20") 'Zahlen für den ersten Ausgabebereich
For Each Zelle In ZahlenX
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1
Next Zelle
Range("DW22:FS22") = IndexX 'Erster Ausgabebereich


Nur dann bekomme ich hier eine Fehlermeldung:
Index außerhalb des gültigen Bereichs
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1


War das so gemeint? Oder ???

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

die Handhabung ist nun besser
diese zwei zeilen im code anpassen

Set DeinBereich = Range("A2:B6")
Set DeineAusgabe = Range("C2:C50")


gruss nighty


Sub Zaehlen1()
Dim IndexX As Variant, ZahlenX As Variant, Zelle As Variant
Dim DeinBereich As Range, DeineAusgabe As Range
Set DeinBereich = Range("A2:B6")
Set DeineAusgabe = Range("C2:C50")
DeineAusgabe.Clear
IndexX = DeineAusgabe
ZahlenX = DeinBereich
For Each Zelle In ZahlenX
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1
Next Zelle
DeineAusgabe = IndexX
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

der Bereich ist flexibel
die ausgabe setzt 49 zellen vorraus

gruss nighty
0 Punkte
Beantwortet von
hallo nighty

also irgendwie bekomme ich auch hier immer die gleiche Fehlermeldung

Index außerhalb des gültigen Bereichs:
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1

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
IndexX(Zelle, 1) = IndexX(Zelle, 1) + 1
Next Zelle
DeineAusgabe = IndexX

Also nochmals,
Die Zahlen 1 bis 49 stehen mehrfach in dem Bereich DW1:FS20
Welche Zahl wie oft vorkommt soll absteigend in der Zeile
DW22:FS22
ausgegeben werden

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

die ausgabe erfordert 1 spalte mit 49 zeilen

der fehler
Range("DW22:FS22")

möchtest du lieber waagerechte Darstellung ?

gruss nighty
0 Punkte
Beantwortet von
hallo,


ja

möchtest du lieber waagerechte Darstellung ?


LG
Sarah
0 Punkte
Beantwortet von
hallo nighty

ich habe hier mal ein Bild hochgeladen

Sarah



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

waagerechte ausgabe

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
IndexX(1, Zelle) = IndexX(1, Zelle) + 1
Next Zelle
Range("DW22:FS22") = IndexX
End Sub
0 Punkte
Beantwortet von
hallo nighty


leider immer wieder Index außerhalb des gültigen Bereichs
Ich habe excel 2003

hier mal die Mustermappe
Mustermappe-Sarah

Danke für jede weitere Hilfe

LG
Sarah
...