So generieren Sie eine 1,2,3,...-Sequenz in Excel, bei der jedes Mitglied N-mal wiederholt wird

So generieren Sie eine 1,2,3,...-Sequenz in Excel, bei der jedes Mitglied N-mal wiederholt wird

Betrachten wir eine Sequenz: 1,2,3,4,5... Das lässt sich in Excel offensichtlich leicht erstellen. Aber wie würden Sie eine abgeleitete Sequenz erstellen, in der jedes Element der ursprünglichen Sequenz N-mal hintereinander vorkommt?

Für N=3 1,1,1,2,2,2,3,3,3,4,4,4,... usw.

Ich habe die Einsenspalte schließlich mit der Funktion „Inhalte einfügen“ kopiert und sie jede Runde um N Zeilen nach unten verschoben. Das ist jedoch alles andere als eine gute Lösung.

Vielen Dank für Ihre Ideen.

Antwort1

Die einfachste Lösung hierfür ist die Verwendung einer normalen Excel-Formel.

Wenn Sie bei A1 beginnen, fügen Sie diese Formel ein und kopieren Sie sie nach unten:

=ROUNDUP(ROWS(A$1:A1)/3,0)

AUFRUNDENrundet eine Zahl aufNDezimalstellen. In diesem FallNist auf 0 gesetzt, sodass Excel auf die nächste ganze Zahl aufrundet.

REIHENzählt die Anzahl der Zeilen in einem Bereich. Passen Sie den Bereichsbezug entsprechend Ihrem Startort an. Beim Kopieren/Einfügen nimmt Excel die Anpassungen für die anderen Zellen vor.

Hinweis: Das Dollarzeichen ist hierwichtig. Es sperrt die Referenz für den Beginn des Bereichs, so dass siestetsmuss in der Startzeile Ihres Bereichs stehen (oder genauer gesagt in der Zeile der ersten Zelle, in die Sie die Formel einfügen – beginnen Sie also damit in der ersten Zeile Ihres Bereichs), unabhängig davon, wie Sie die Formel kopieren/einfügen. Ohne diese Einstellung wird Ihre Formel beim Kopieren nach unten beschädigt. Ändern Sie also die Buchstaben und Zahlen entsprechend der Position Ihrer ersten Zelle, lassen Sie das Dollarzeichen jedoch dort.

Bildbeschreibung hier eingeben

/3dient dazu, die ROWS-Anzahl durch drei zu teilen. Da dies innerhalb der ROUNDUP-Funktion liegt und diese auf 0 Dezimalstellen eingestellt ist, werden alle Ergebnisse auf die nächste ganze Zahl aufgerundet. Sobald die Formel den Rest der Spalte ausgefüllt hat, führt dies dazu, dass sich jede Zahl dreimal wiederholt. Um eine andere Wiederholungsrate zu erhalten, ersetzen Sie 3 durch eine andere Zahl.


Wenn Sie dies tun möchtenüberAReihe, anstattrunterASpalte(z. B. in A1, B1, C1, … statt in A1, A2, A3, …) müssen Sie die Funktion COLUMNS statt ROWS verwenden und den Bereichsverweis so anpassen, dass die Startspalte statt der Startzeile gesperrt wird.

Beispiel:

=ROUNDUP(COLUMNS($A1:A1)/3,0)

Für eine Formel, die in einer Reihe funktioniertoderSpaltenlayout: Sie könnten etwas wie das untenstehende verwenden, aber es ist besser, einfach eines der oben genannten auszuwählen, je nachdem, welches Layout Sie tatsächlich verwenden. Dies führt auch zu wahrscheinlich unerwünschten Ergebnissen, wenn Ihr Bereich mehrere Zeilen umfasstUndmehrere Spalten.

=ROUNDUP(COLUMNS($A1:A1)*ROWS(A$1:A1)/3,0)

Für etwas, das nicht sequenziell und/oder nicht numerisch ist, sollten Sie einen Bereich reservieren, der als Quellliste verwendet werden soll. Nehmen wir an, Ihre Liste mit Quellwerten befindet sich in Spalte B, beginnend bei B1. Um die Werte in Spalte A jeweils dreimal zu wiederholen, verwenden Sie Folgendes in A1 und kopieren es nach unten:

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/3,0)))

Hinweis: Dies wird die Verschiebung der Quellspalte nicht berücksichtigen. Sie müssen die Formel manuell korrigieren und "B"an die neue Position anpassen, wenn die Quellspalte verschoben wird. Wenn Ihre Quelldaten in einer anderen Zeile als Zeile 1 beginnen, müssen Sie die Formel ein wenig anpassen, um den Versatz hinzuzufügen.


Wenn Sie die Wiederholungsrate anpassen möchten, verwenden Sie eine Referenzzelle für den Divisor. Das folgende Beispiel beginnt mit der vorherigen Formel und geht davon aus, dass der Divisor in C1 liegt.

=INDIRECT(CONCATENATE("B",ROUNDUP(ROWS(A$1:A1)/C1,0)))

Antwort2

Ich habe festgestellt, dass eine Methode für dynamische Arrays gut funktioniert:

=ROUNDDOWN(SEQUENCE(count*repeats,,1,1/repeats),0)

zB für count=2, mit repeats=3

=ROUNDDOWN(SEQUENCE(6,,1,1/3),0)

Produziert:

1,1,1,2,2,2

Antwort3

Um flexibel und für andere Situationen wiederverwendbar zu sein (einschließlich Funktionen wie das Einfügen der Ergebnisse in Zeilen oder Spalten, verschiedene Arbeitsmappen usw.), ist es am besten, die Makrosprache von Excel (VBA) zu verwenden. Um schnell loszulegen, können Sie die ungefähren Schritte, die Sie automatisieren möchten, in einem Makro aufzeichnen und dieses Makro dann bearbeiten, um es zu optimieren und anzupassen. Hier ist beispielsweise ein VBA-Code, um jede Zelle der ersten Spalte in die dritte Spalte zu verdreifachen:

Sub triplicate()

iDestCol = 3
nCopy = 3
rowEnd = ThisWorkbook.ActiveSheet.Range("a" & Rows.Count).End(xlUp).Row
nIndex = 0
With ThisWorkbook.ActiveSheet

For i = 1 To rowEnd
    For j = 1 To nCopy
        Cells((nIndex + j), iDestCol) = Cells(i, 1)
    Next j
    nIndex = nIndex + nCopy

Next i
End With

End Sub

verwandte Informationen