2k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo alle zusammen,
ich SUCHE eine Lösung um einen großen Nummern Datensatz in unterschiedliche Kleine zu wandeln.
Beispiel:
ich habe mehrere 1000 Nummern, egal ob in einer Zeile oder Reihe,
und möchte daraus z.B. 10 mal 10er Gruppen ODER 20 mal 5er ODER 100mal100er Gruppen erstellen.

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25..........,100

10mal10er Gruppen
0,1,2,3,4,5,6,7,8,9
10,11,12,13,14,15,16,17,18,19
20,21,22,23,24,25........

20mal5er Gruppen
0,1,2,3,4
5,6,7,8,9
10,11,12,13,14
15,16,17,18,19
20,21,22,23,24
25,........

wenn es dafür ein script oder sogar eine software gibt, dankend gesucht.....

6 Antworten

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

wenn Du Dich etwas klarer ausdrücken könntest und uns sagst, in
welchem Bereich die Ausgangswerte stehen und in welchem Bereich die
Zielwerte aufgelistet werden sollen, könnte man mal über Deine Frage
nachdenken.

Alles Andere wäre nur Rätselraten.

Gruß
Rainer
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo, so?
im Beispiel ist b3:b803 der Bereich mit den Daten. Alle müssen entweder in einer Spalte oder einer Zeile stehen.
e6 ist die linke obere Ecke des Bereichs, in dem die gesplitteten Daten ausgegeben werden:
Sub derTest()
Dim Arr
Arr = Reihensplit(Range("b3:c80"), 7) 'b3:b803 'd3:ad3
Range("e6").Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub

Function Reihensplit(Bereich As Range, AnzSpalten As Long) As Variant
Dim arV, arAus, i%, j%, k%
If Bereich.Columns.Count = 1 Then
arV = Bereich.Value
ElseIf Bereich.Rows.Count = 1 Then arV = Application.Transpose(Bereich.Value)
Else
ReDim arAus(1, 1)
Reihensplit = arAus
Exit Function
End If
ReDim arAus(1 To CLng(UBound(arV) \ AnzSpalten), 1 To AnzSpalten)
k = 1
For j = 1 To UBound(arAus)
For i = 1 To UBound(arAus, 2)
arAus(j, i) = arV(k, 1)
k = k + 1
Next
Next
Reihensplit = arAus
End Function
0 Punkte
Beantwortet von
VIELEN DANK !!!

Hallo Rainer, ich habs sogar "gezeichnet", sollte doch klar rüberkommen:

VIELE Zahlen in einer Reihe ODER Spalte

UND diese sollten in kleinere Gruppen aufgeteilt werden...

z.B.

100 Zahlendatensätze GETEILT duch X (z.B. x=5) ERGIBT 20 Zeilen oder Reihen á 5 Datensätze ....... usw.

Zeile 1: 1,2,3,4.............. 100

Zeile 2: 1,2,3,4,5
Zeile 3: 6,7,8,9,10
Zeile 4: 11,12,13,14,15
........
Zeile 20: 96,97,98,99,100
0 Punkte
Beantwortet von
Hallo Rudi4ad,

Danke Dir, schaut GUT aus, nur hab ich nocht so den Plan wie oderwo ich den Code einfüen soll, dazu sind meine Excel Kenntnisse eher bescheiden ;)

Wenn Du mit bitte soweit helfen würdest damit ich das mal umsetzen kann wäre ich Dir SEHR DANKBAR ;)

Grüße
0 Punkte
Beantwortet von rudi4ad Mitglied (167 Punkte)
Hallo

im VBA-Editor Einfügen -> Modul
den Code hinein kopieren
siehe auch:
http://www.online-excel.de/excel/singsel_vba.php?f=44

Starten lässt sich die Sub dann in Excel über das Menü oder du weist es irgendeinem grafischen Element zu.

Hier das Ganze noch einmal ein bischen geändert:
Option Explicit

Sub derTest()
Dim Arr
Arr = Reihensplit(Range("b3:b80"), 6) 'Bsp. für Zeile d3:ad3
Range("e6").Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub


Private Function Reihensplit(Bereich As Range, AnzSpalten As Long) As Variant
Dim arV, arAus, i%, j%, k%
If Bereich.Columns.Count = 1 Then
arV = Bereich.Value
ElseIf Bereich.Rows.Count = 1 Then arV = Application.Transpose(Bereich.Value)
Else
ReDim arAus(1 To 1, 1 To 1)
arAus(1, 1) = "#Bereich"
Reihensplit = arAus
Exit Function
End If
ReDim arAus(1 To UBound(arV) \ AnzSpalten, 1 To AnzSpalten)
k = 1
For j = 1 To UBound(arAus)
For i = 1 To UBound(arAus, 2)
arAus(j, i) = arV(k, 1)
k = k + 1
Next
Next
Reihensplit = arAus
End Function
0 Punkte
Beantwortet von
Hallo Deal321,

eine Formellösung für Einträge in einer Zeile könnte so aussehen:

die Daten stehen in Zeile 1 beginnend in A1 und sind lückenlos

Formel in A2: =ANZAHL2(1:1)
Eintrg in B2 : Anzahl der Spalten, z.B. 5
Formel in C2: =A2/B2

Ich gehe jetzt erst einmal davon aus, daß die Anzahl Einträge/Anzahl Spalten eine gerade Zahl ergibt.

Formel in der ersten Zelle des Ausgabebereiches:

=WENN(SPALTE(A1)>$B$2;"";WENN(ZEILE(A1)>$C$2;"";INDEX($1:$1;0;ZEILE(A1)+($C$2*(SPALTE(A1)-1)))))

Diese Formel soweit nach unten und rechts kopieren wie Werte erwartet werden, also im Extremfall der Anzahl der Einträge entsprechend nach unten und ebenso nach rechts

CU Aliba
...