如何在 Excel 中產生 1,2,3,... 序列,每個成員重複 N 次

如何在 Excel 中產生 1,2,3,... 序列,每個成員重複 N 次

讓我們考慮一個序列: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)

圍捕將數字向上捨入到n小數位。在這種情況下,n設定為 0,因此 Excel 將四捨五入到最接近的整數。

行列式計算範圍內的行數。根據您的起始位置調整範圍參考。當您複製/貼上時,Excel 將處理其他儲存格的調整。

注意:這裡的美元符號是重要的。它鎖定範圍開始的參考,以便總是無論您如何複製/貼上公式,都應位於範圍的起始行(或者更準確地說,是您將公式放入的第一個單元格的行 - 因此從範圍的第一行開始)。如果沒有這個,當你複製它時你的公式就會被破壞。因此,根據第一個單元格的位置更改字母和數字,但將美元符號保留在那裡。

在此輸入影像描述

/3在那裡將 ROWS 計數除以三。由於這是在 ROUNDUP 函數內部,並且設定為小數點後 0 位,因此所有結果都將四捨五入到最接近的整數。一旦公式填入該列的其餘部分,這將導致每個數字重複 3 次。若要獲得不同的重複率,請將 3 改為不同的數字。


如果你想這樣做穿過A, 代替向下A柱子(例如:在 A1、B1、C1...而不是 A1、A2、A3...)中,您需要使用 COLUMNS 函數而不是 ROWS,並調整範圍引用,以便鎖定起始列而不是起始行。

例子:

=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)

例如,計數 = 2,重複次數 = 3

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

生產:

1,1,1,2,2,2

答案3

為了在其他情況下靈活且可重複使用(包括將結果放入行或列、不同的工作簿等功能),最好的方法是使用 Excel 的巨集語言 (VBA)。為了快速開始,您可以在巨集中記錄要自動化的大致步驟,然後編輯該巨集以進行微調和自訂。例如,以下是一些將第一列的每個儲存格複製三次到第三列的 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

相關內容