Excel で各メンバーを N 回繰り返して 1、2、3、... のシーケンスを生成する方法

Excel で各メンバーを N 回繰り返して 1、2、3、... のシーケンスを生成する方法

1、2、3、4、5... というシーケンスを考えてみましょう。これは明らかに Excel で簡単に作成できます。しかし、元のシーケンスの各メンバーが N 回連続する派生シーケンスを作成するにはどうすればよいでしょうか。

N=3 の場合 1,1,1,2,2,2,3,3,3,4,4,4、... など。

私は最終的に、特殊貼り付けの追加機能を使用して 1 の列をコピーし、それを N 行ずつ下にスライドさせました。しかし、これは良い解決策とは程遠いものです。

ご意見ありがとうございます。

答え1

この問題に対する最も簡単な解決策は、通常の Excel 数式を使用することです。

A1 から開始する場合は、次の数式をドロップして下にコピーします。

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

切り上げする数値を切り上げる小数点以下の桁数。この場合、0 に設定されているため、Excel は最も近い整数に切り上げます。

範囲内の行数をカウントします。開始位置に応じて範囲参照を調整します。コピー/貼り付けを行うと、Excel が他のセルの調整を処理します。

注: ここでのドル記号は重要範囲の開始点の参照をロックして、いつも数式をコピー/貼り付ける方法に関係なく、範囲の開始行 (または、より正確には、数式をドロップする最初のセルの行 - つまり、範囲の最初の行でこれから始まります) になければなりません。これがないと、数式をコピーしたときに壊れてしまいます。したがって、最初のセルが配置される場所に応じて文字と数字を変更しますが、ドル記号はそのままにしておきます。

ここに画像の説明を入力してください

/3ROWS 数を 3 で割る関数です。これは ROUNDUP 関数内にあり、小数点以下 0 桁に設定されているため、すべての結果は最も近い整数に切り上げられます。数式が列の残りの部分に入力されると、すべての数字が 3 回繰り返されることになります。繰り返し率を変更するには、3 を別の数字に変更します。


これをやりたいなら横切って1つの、 の代わりに1つのカラム(例: A1、A2、A3、... ではなく、A1、B1、C1、...) ROWS 関数ではなく COLUMNS 関数を使用し、開始行ではなく開始列がロックされるように範囲参照を調整する必要があります。

例:

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

連続して機能する式の場合または列レイアウトでは、以下のようなレイアウトを使用することもできますが、実際に使用しているレイアウトに応じて上記のいずれかを選択することをお勧めします。範囲が複数の行にまたがる場合は、望ましくない結果が発生する可能性があります。そして複数の列。

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

連続していない、または数値ではないものについては、ソース リストとして使用する範囲を確保する必要があります。ソース値のリストが B 列にあり、B1 から始まっているとします。この場合、列 A で値を 3 回ずつ繰り返すには、A1 でこれを使用して下にコピーします。

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

注: この方法では、ソース列の移動は調整されません。"B"ソース列が移動された場合は、新しい場所に合わせて数式を手動で修正する必要があります。ソース データが行 1 以外の行から始まる場合は、オフセットを追加するために数式を少し調整する必要があります。


繰り返し率を調整できるようにするには、除数に参照セルを使用します。以下の例は、前の数式から始まり、除数が C1 にあると想定しています。

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

答え2

動的配列にうまく機能することがわかったもの:

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

例えば、count=2、repeats=3 の場合

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

生産:

1,1,1,2,2,2

答え3

他の状況 (結果を行や列に配置する機能、別のワークブックなど) に柔軟かつ再利用できるようにするには、Excel のマクロ言語 (VBA) を使用するのが最適です。すぐに開始するには、自動化する手順をマクロに大まかに記録し、そのマクロを編集して微調整やカスタマイズを行うことができます。たとえば、最初の列の各セルを 3 列目に 3 倍に複製する VBA コードを次に示します。

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

関連情報