Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1292to1296
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA : Werte einordnen
20.01.2013 19:49:18
Daniel
Guten Abend Zusammen,
leider habe ich zu meinem Problem die Suchfunktion betätigt, wurde aber nicht fündig. Falls es das Thema irgendwo gibt, gerne link posten. Andernfalls schonmal danke für Eure Hilfe!
Mein Problem:
Ich hab ein Array, in dem in der ersten Spalte 50.000 verschiedene Werte stehen. Z.B. zwischen 0 und 8000. Nun möchte ich diese Werte zählen und in Kategorien zwischen 0 und 100 Prozent mit 100 Feldern einordnen.
Beispiel:
Wert 8000 tritt 5 mal auf, dann hat die Kategorie 100%: 5.
Wert 4000 tritt 3 mal auf, dann hat die Kategorie 50%: 3.
usw. so möchte ich gerne 50.000 Werte einsortieren.
Ungern möchte ich 100 if größer als Then schreiben.
Dafür suche ich einen Automatismus, der dies übernimmt.
Jemand spontan ein Idee für mich?
Vielen Dank für Eure Mühen!
MFG Daniel

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA : Werte einordnen
20.01.2013 20:23:21
ransi
Hallo Daniel
Nehmen wir mal an das sind deine Daten:
Tabelle1

 A
17738
22195
35885
42029
55910
66096
75595
82483
91848
107049
1110
124622
137972
146325
153140
162306
17usw. bis A50000


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Jetzt lass mal diesen Code laufen:
Option Explicit

Sub machs()
    Dim myDic As Object
    Dim Arr As Variant
    Dim L As Long
    Const Zahl As Long = 8000
    Arr = Range("A1:A50000")
    Set myDic = CreateObject("Scripting.Dictionary")
    For L = LBound(Arr) To UBound(Arr)
        myDic(Arr(L, 1) / Zahl) = myDic(Arr(L, 1) / Zahl) + 1
    Next
    With Range("B1").Resize(myDic.Count)
        .Value = WorksheetFunction.Transpose(myDic.keys)
        .NumberFormat = "0.0000%"
        .Sort Range("B1"), xlAscending, , , , , , xlNo
    End With
    
    Range("C1").Resize(myDic.Count) = WorksheetFunction.Transpose(myDic.items)
    
End Sub


Ausgabe ist dann sowas:
Tabelle1

 ABC
162610,0000%8
23700,0125%7
354180,0250%6
464660,0375%6
564620,0500%6
665710,0625%11
730600,0750%3
877720,0875%9
965220,1000%6
1042770,1125%8
11100,1250%3
128920,1375%8


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi

Anzeige
AW: VBA : Werte einordnen
20.01.2013 21:04:15
Daniel
Hallo ransi,
danke für deine rasche Antwort. Ich habe versucht damit mein Problem anzugehen, komme aber nicht weiter.
Ich habe eine Beispieldatei erstellt:
https://www.herber.de/bbs/user/83487.xlsx
Vielleicht wird dann mein Problem verständlicher.
Es sollten nur 100 Kategorien zwischen 0 und 100 Prozent als Sortierkategorie angenommen werden. Also je 1 Prozent eine Möglichkeit. So sollen alle Werte(aus A(bis 50000)) im Wertebereich zwischen 0 und 8000 in diese Kategorien von 0 bis 100 Prozent einsortiert werden.
Alle werte zwischen 0 und 80 zu 1%
Alle Werte zwischen 80 und 160 zu 2%
usw bis 100%
Nochmals danke für deine Hilfe!

Anzeige
ohne VBA - mit ZÄHLENWENN
21.01.2013 01:26:56
Erich
Hi Daniel,
darf's auch ohne VBA sein? Dann vielleicht so:
 CD
31%537
42%84
53%62

Formeln der Tabelle
ZelleFormel
D3=ZÄHLENWENN($A$3:$A$1090;"<"&80*(ZEILE()-1))
D4=ZÄHLENWENN($A$3:$A$1090;"<"&80*(ZEILE()-1))-SUMME(D$3:D3)
D5=ZÄHLENWENN($A$3:$A$1090;"<"&80*(ZEILE()-1))-SUMME(D$3:D4)

Mit Application.CountIf kannst du das auch in VBA erledigen.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
ohne VBA - mit ZÄHLENWENN - Korrektur
21.01.2013 01:31:32
Erich
Hi Daniel,
da hatte ich zwar spät, aber doch zu schnell geschossen.
Neue Version:
 CD
31%342
42%196
53%83

Formeln der Tabelle
ZelleFormel
D3=ZÄHLENWENN($A$3:$A$1090;"<="&80*(ZEILE()-2))
D4=ZÄHLENWENN($A$3:$A$1090;"<="&80*(ZEILE()-2))-SUMME(D$3:D3)
D5=ZÄHLENWENN($A$3:$A$1090;"<="&80*(ZEILE()-2))-SUMME(D$3:D4)

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: ohne VBA - mit ZÄHLENWENN - Korrektur
21.01.2013 21:37:19
Daniel
Hallo,
vielen Dank für die Rückmeldungen!
Da ich mein komplettes Programm in VBA geschrieben habe, suche ich auch nach einem VBA Code, der das für mich macht. Weil ich mehrere Schleifen durchlaufen lassen möchte und die min und max werte sich neu ergeben.
Mit Application.CountIf komme ich leider nicht weiter.
Vielen Dank nochmals für eine weitere Hilfestellung!
MFG Daniel

ZÄHLENWENN mit VBA und CountIf
22.01.2013 01:05:04
Erich
Hi Daniel,
was genau meinst du mit "Mit Application.CountIf komme ich leider nicht weiter"?
Was hast du versucht? Wie weit bist du gekommen?
Hier habe ich Mustafas Code noch etwas verändert: Option Explicit Sub ZählenwennVBA2() Dim ii As Long, zz As Long, rngB As Range zz = Cells(Rows.Count, 1).End(xlUp).Row Set rngB = Range("A3:A" & zz) Cells(3, 4) = WorksheetFunction.CountIf(rngB, " Ob er in deine VBA-Umgebug passt, kannst nur du sagen.
Das habe ich nicht verstanden:
"Weil ich mehrere Schleifen durchlaufen lassen möchte und die min und max werte sich neu ergeben."
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: ohne VBA - mit ZÄHLENWENN - Korrektur
22.01.2013 00:36:31
Mustafa
Hallo Daniel,
mit der WorksheetFunction.CountIf sollte es wohl so gehn :
Sub ZählenwennVBA()
Dim IntX As Integer
Dim LngX As Long
Cells(3, 4) = WorksheetFunction.CountIf(Range("A3:A50000"), "

Rückmeldung obs hilft wäre nett.
Gruß aus der Domstadt Köln.

Fehlerhafte Resultate beim testen sorry owT
22.01.2013 00:47:35
Mustafa

AW: VBA : Werte einordnen
22.01.2013 00:44:58
Daniel
Hi
probier mal folgenden Code (geschrieben für und getestet mit deiner Beispieldatei)
Sub xxx()
Dim Erg(1 To 100, 1 To 1) As Long
Dim Daten
Dim D
Dim Partition  As Double
Daten = ActiveSheet.Columns(1).SpecialCells(xlCellTypeConstants, 1).Value
Partition = ActiveSheet.Range("F1").Value
For Each D In Daten
Erg(WorksheetFunction.RoundUp(D / Partition, 0), 1) = Erg(WorksheetFunction.RoundUp(D /  _
Partition, 0), 1) + 1
Next
Range("D3").Resize(100, 1).Value = Erg
End Sub

Gruß Daniel

Anzeige
AW: VBA : mit Hilfsspalte und Pivottabelle
21.01.2013 15:07:42
Daniel
Hi
falls die Werte in einer Spalte einer Exceltabelle stehen dann könnte es so funktionieren:
1. berechne in einer Hilfzelle (bspw C1) den Maximalwert der Werte mit der Formel: =Max(A:A)
2. schreibe jetzt in eine Hilfsspalte (bspw B) neben die Werte die Formel (geschreiben für B2): =Runden(A1*100/$C$1;0) und kopiere sie Bis ans Datenende
3. Schreibe in B1 eine passende Überschrift "Kategorie"
4. Werte die ganze Tabelle mit Hilfe der Pivottabelle aus. Ziehe hierzu die Spalte "Kategorie" nach Zeilen und werte in Daten diese Spalte mit "Anzahl" aus.
Gruß Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige