Feldauffüllung eines Feldes f mit natürlichen Zahlen nach Muster
#1
Hallo liebes Forum,

ich hoffe sehr ihr könnt mir helfen.

Ein Feld f soll in Abhängigkeit einer gegebenen Datensatzanzahl, sowie  in Abhängigkeit einer vorgegebenen
Paketgröße und einer vorgegebenen Anzahl von Wiederholungen dieser Pakete nach einem Muster gefüllt werden.

Zur Veranschaulichung habe ich hier mal 4 Beispiele aufgeschrieben:

1. Beispiel
Datensatzanzahl: 9
Paketgröße: 3
Wiederholungen: 2

Ergebnis für die einzelnen Feldwerte:
f(1)= 1|f(2)= 2|f(3)= 3|  1.Wiederholung
f(4)= 1|f(5)= 2|f(6)= 3|  2.Wiederholung

f(7)= 4|f(8)= 5|f(9)= 6|
f(10)= 4|f(11)= 5|f(12)= 6|

f(13)= 7|f(14)= 8|f(15)= 9|
f(16)= 7|f(17)= 8|f(18)= 9|


2. Beispiel:
Datensatzanzahl: 12
Paketgröße: 5
Wiederholungen: 3

Ergebnis für die einzelnen Feldwerte:
f(1)= 1|f(2)= 2|f(3)= 3|f(4)= 4|f(5)= 5|     1. Wiederholung
f(6)= 1|f(7)= 2|f(8)= 3|f(9)= 4|f(10)= 5|    2. Wiederholung
f(11)= 1|f(12)= 2|f(13)= 3|f(14)= 4|f(15)= 5|  3. Wiederhung

f(16)= 6|f(17)= 7| f(18)= 8|f(19)= 9|f(20)= 10|
f(21)= 6|f(22)= 7|f(23)= 8|f(24)= 9|f(25)= 10|
f(26)= 6|f(27)= 7|f(28)= 8|f(29)= 9|f(30)= 10|

3. Beispiel:
Datensatzanzahl: 12
Paketgröße: 4
Wiederholungen: 2

Ergebnis für die einzelnen Feldwerte:
f(1)= 1|f(2)= 2|f(3)= 3|f(4)= 4|  1. Wiederholung
f(5)= 1|f(6)= 2|f(7)= 3|f(8)= 4|  2. Wiederholung

f(9)= 5|f(10)= 6|f(11)= 7|f(12)= 8|
f(13)= 5|f(14)= 6|f(15)= 7|f(16)= 8|

f(17)= 9|f(18)= 10|f(19)= 11|f(20)= 12|
f(21)= 9|f(22)= 10|f(23)= 11|f(24)= 12|

4. Beispiel
Datensatzanzahl: 10
Paketgröße: 2
Wiederholungen: 3


Ergebnis für die einzelnen Feldwerte:
f(1)= 1|f(2)= 2|  1.Wiederholung
f(3)= 1|f(4)= 2|  2.Wiederholung
f(5)= 1|f(6)= 2|  3.Wiederolung

f(7)= 3|f(8)= 4|
f(9)= 3|f(10)= 4|
f(11)= 3|f(12)= 4|

f(13)= 5|f(14)= 6|
f(15)= 5|f(16)= 6|
f(17)= 5|f(18)= 6|

f(19)= 7|f(20)= 8|
f(21)= 7|f(22)= 8|
f(23)= 7|f(24)= 8|

f(25)= 9|f(26)= 10|
f(27)= 9|f(28)= 10|
f(29)= 9|f(30)= 10|


Wie sieht dazu der Code aus?
Schon mal im voraus ein großes Dankeschön für eure Hilfe.
Top
#2
Die drei Parameter stehen in Deiner Reihenfolge in A1:A3.

C1: =WENNFEHLER(1/(1/((REST(ZEILE(A1);$A$3+1)<>0)*(REST(SPALTE(A1)-1;$A$2)+1+KÜRZEN(ZEILE(A1)/($A$3+1))*$A$2)*(SPALTE(A1)<=$A$2)));"")
ausreichend nach rechts und unten kopieren

1) Zeilenlücke aufgrund Pakethöhe und
2) Paketbreite berücksichtigt.
3) Begrenzung ("Anzahl Daten") könnte ich noch nachreichen, ist aber eigentlich verzichtbar.
Top
#3
Hallo,

danke für die unglaublich schnelle Antwort. Aber ich brauche eine VBA Lösung, was für euch Cracks

dann auch nur eine Fingerübung ist.
Top
#4
Hallo,
Würde es reichen wenn die Formeln per VBA eingetragen und dann die berechneten Ergebnisse durch Werte ersetzt werden?
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#5
Hallo André,

ich hätte schon gerne eine reine VBA Lösung. Mit der VBA Literatur habe ich oft so meine

Schwierigkeiten. Die meisten Sachen sind für mich uninteressant und bei etwas komplizierteren

Angelegenheiten fehlen mir dann wiederum die Grundlagen. Anderseits möchte ich mit

einem "Kleinstprojekt" von mir von Anfang an  auch  eine Sache programmieren  

von der ich ein bißchen Nutzen habe. Aber vielleicht macht diese Aufgabe auch zu viel Aufwand.

Ich kann das nicht abschätzen. Das Forum lebt schließlich von freiwilligen Helfern.

Auf jeden Fall danke.
Top
#6
Hallo Diamant,

suchst du ein vollständiges Makro (mit Einlesen der Parameter) oder nur ein Code-Schnipsel für die Ausgabe?

Im ersten Fall lad doch bitte eine Beispieldatei hoch.

Kannst du dein zweites Beispiel noch einmal weiter erläutern, da hier die Zahlen nicht bis 12 sondern nur bis 10 geschrieben werden.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#7
Hallöchen,

ich habe hier mal einen Beispielcode. Die einzelnen Kenngrößen habe ich fest als Konstanten programmiert. Stattdessen kann man aber auch Zellen zur Eingabe verwenden.
Das Makro fängt mit den Eintragungen immer in A1 an. Du musst also aufpassen, wenn da was steht - sichere es vorher. Man kann aber auch das flexibel gestalten.

Code:
Sub Makro1()
'Konstantendeklaration
'Hinweis: Es koennen stattdessen auch Zelleintraege verwendet werden
'Long
Const iSatz As Long = 10
Const iPaket As Long = 2
Const iRepeat As Long = 3
'Variablendeklaration
'Integer
Dim iCnt1%, iCnt2%, iCnt3%
'Zeilenzaehler auf Anfang seztzen
iCnt1 = 1
'Schleife ueber alle Datensaetze
For iCnt2 = 1 To iSatz Step iPaket
 'Schleife ueber alle Pakete
 For iCnt3 = 1 To iRepeat
   'mit der ersten Zelle des Pakets
   With Cells(iCnt1, 1)
     'Zaehler als Wert eintragen
     .Value = iCnt2
     'Zeile als Reihe ausfuellen
     .DataSeries Rowcol:=xlRows, Type:=xlLinear, Date:=xlDay, _
             step:=1, Stop:=iCnt2 + iPaket - 1, Trend:=False
   'Ende mit der ersten Zelle des Pakets
   End With
   'Zeilenzaehler hochsetzen
   iCnt1 = iCnt1 + 1
 'Ende Schleife ueber alle Pakete
 Next
'Ende Schleife ueber alle Datensaetze
Next
End Sub

@ego:
Datensätze / Paketgröße = Anzahl Blöcke
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


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