Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

Zahlenwerte gruppieren
#1
Hi,

ich habe eine Liste mit vielen Zahlen von 0 bis 70.

G & K
WX
2GruppierungDauer
36
40
50
624
721
819
950
100
110
126
130
1415
150
160
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 18.22 einschl. 64 Bit



Nun sollen diese in 4er-Schritten gruppiert werden und alles größer 28 ist eine Gruppe.

Also
0 = 0
1-4 = 4
5-8 = 8
9-12 = 12
...
25 - 28 = 28
größer = >28

Ich will dann ein Diagramm draus machen, in dem die Spalte Gruppierung als x-Achse dargestellt wird.
Wie sieht denn die Formel für Spalte W aus?
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#2
Hallo Ralf,

eine Lösungsmöglichkeit:

Arbeitsblatt mit dem Namen 'Tabelle1'
 BC
3GruppierungDauer
486
500
600
72424
82421
92019
102850
1100
1200
132825
1400
151615
1600
1700

ZelleFormel
B4=WENN(C4=0;0;MIN(AUFRUNDEN(C4/4;0)*4;28))
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Atilla
to top
#3
Hi Atilla!
MIN(0) ist doch 0:

BC
3GruppierungDauer
486
500
600
72424
82421
92019
102850
1100
1200
132825
1400
151615
1600
1700

ZelleFormel
B4=MIN(AUFRUNDEN(C4/4;0)*4;28)

Gruß Ralf
to top
#4
(23.02.2015, 12:48)RPP63 schrieb: Hi Atilla!
MIN(0) ist doch 0:


Gruß Ralf
Hallo Ralf,

danke für den Hinweis.

Ich setz mich in die Ecke und schäme mich. 29
Gruß Atilla
to top
#5
Hallo Ralf,

ich bin nicht so der Formelianer.

Hier eine alternative Lösung:

Code:
Sub Gruppierung()
Dim zeile As Long
Dim ZeileMax As Long

With Tabelle1
ZeileMax = .Cells(Rows.Count, 24).End(xlUp).Row

   For zeile = 2 To ZeileMax
   
       Select Case .Range("X" & zeile).Value
           Case Is <= 4
               .Range("W" & zeile).Value = "4"
           Case 5 To 8
               .Range("W" & zeile).Value = "8"
           Case 9 To 12
               .Range("W" & zeile).Value = "12"
           Case 13 To 16
               .Range("W" & zeile).Value = "16"
           Case 17 To 20
               .Range("W" & zeile).Value = "20"
           Case 21 To 24
               .Range("W" & zeile).Value = "24"
           Case 25 To 28
               .Range("W" & zeile).Value = "28"
           Case Is > 28
               .Range("W" & zeile).Value = ">28"
       End Select
       
   Next zeile
   
End With

End Sub
Gruß
Max
to top
#6
Hallo Max!
Ich komme ja auch eher aus der VBA-Ecke, gebe bei Deiner Lösung aber folgendes zu bedenken:
  1. Ein Schleifenstep bei Dir enthält 9 Operationen, meine Formel nur 5.
  2. (und wichtiger!): eine Formelberechnung findet im Arbeitsspeicher statt, während Dein Code pro Schleife einen Zell-Lese- und Schreibzugriff ausführt.
Dies mag jetzt bei den paar Zeilen völlig unerheblich sein, aber führe dies mal mit 150.000 Zellen durch ...
Wenn überhaupt per VBA, dann schaufel die Ausgangsspalte in ein Array, errechne ein Ergebnisarray und schreibe dieses in einem Rutsch in den Zielrange.
Selbst da dürfte die Formellösung schneller sein.

Freundliche Grüße vom ollen Ralf
to top
#7
Hi,

super, danke euch allen!

Klappt natürlich!
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top
#8
Hallo Ralf,

auch wenn die Lösung schon da ist
hier noch eine Variante
ohne Formel, ohne VBA
in 2 Sek erledigt Smile

.xlsx   gruppen.xlsx (Größe: 22,43 KB / Downloads: 12)
lg Chris
Feedback nicht vergessen.
3a2920576572206973742064656e20646120736f206e65756769657269672e
 ?mage

to top
#9
(23.02.2015, 13:23)RPP63 schrieb: Hallo Max!
Ich komme ja auch eher aus der VBA-Ecke, gebe bei Deiner Lösung aber folgendes zu bedenken:



  1. Ein Schleifenstep bei Dir enthält 9 Operationen, meine Formel nur 5.
  2. (und wichtiger!): eine Formelberechnung findet im Arbeitsspeicher statt, während Dein Code pro Schleife einen Zell-Lese- und Schreibzugriff ausführt.
Dies mag jetzt bei den paar Zeilen völlig unerheblich sein, aber führe dies mal mit 150.000 Zellen durch ...
Wenn überhaupt per VBA, dann schaufel die Ausgangsspalte in ein Array, errechne ein Ergebnisarray und schreibe dieses in einem Rutsch in den Zielrange.
Selbst da dürfte die Formellösung schneller sein.

Freundliche Grüße vom ollen Ralf


Hallo oller Ralf Smile ,

danke für Deine Anmerkung.
Um ehrlich zu sein, versuche ich mich ein wenig gegen diesen "Array"-Hype zu wehren (wo möglich).
Zum einen, weil ich selbst noch nicht sooo lange VBAle und mir die Programmierung von Arrays eher schwerlich von der Hand geht.
Das mag vielleicht auch daran liegen, dass ich mich noch nicht genug damit auseinander gesetzt habe.
Die andere Geschichte ist, dass ich denke, das Aussenstehende mit so einem Array vielleicht noch mehr Probleme haben.
Und zu guter letzt versuche ich durch meine "Hilfe" hier meine eigenen VBA-Kenntnisse zu festigen und hier und da auch neue Techniken zu lernen.
Ähnlich wie bei einer Formellösung, gibt es sicherlich auch immer mehrere Möglichkeiten eine Problemstellung per VBA zu lösen.

Über die Tatsache das ein Array sehr performant ist, brauchen wir hier nicht zu diskutieren.

Also vergib mir, dass ich Ralfs Frage "wie lautet die Formel in W" bewusst überlesen habe und einfach nur ein bisschen "Code" produziert habe 100.

Gruß
Max
to top
#10
Hi Chris,

(23.02.2015, 13:41)chris-ka schrieb: auch wenn die Lösung schon da ist
hier noch eine Variante
ohne Formel, ohne VBA
in 2 Sek erledigt Smile

ja, das ist auch eine sehr gute Lösung, dann kann ich mich mit der Pivot ebenfalls direkt auf die Daten beziehen.
Ich hatte das mit der Gruppierung so nicht hinbekommen. Habe wohl die Vorgehensweise mit dem dritten Wert beim Gruppieren nicht kapiert.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste