簡體   English   中英

每10個單元格范圍將粘貼復制* 10次到一列

[英]Copy paste every 10 cells range *10 times to a column

我想每10行復制和粘貼一次,從A列到B列進行10次,以此類推,直到A列的結尾。

IMG1

這是我嘗試過的宏的一個示例:

Sub cpydble()
Dim j As Long
Dim i As Long
Dim lRow As Long


lRow = Cells(Rows.Count, 1).End(xlUp).row


For i = 1 To lRow Step 10
    For j = 1 To 100 Step 10
    Cells(i, 1).Resize(10).Copy Destination:=Cells(j, 2)

    Next j
Next i
End Sub

我是VBA的初學者,希望您能對此有所幫助-預先感謝。

這是我目前的結果:

IMG2

您可以使用:

For i = 1 To lRow Step 10
    Range("B" & i & ":B" & i + 9).Value = Range("A1:A10").Value
Next i

請注意,使用上面的代碼,如果它不是10的倍數,則最后一次迭代將在A列的最后一行下方。

每次從1開始j可能是一團糟。 只需為每個循環找到下一個打開的單元格即可。

Sub cpydbl()

    Dim i As Long, j As Long
    Dim lRow As Long

    lRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lRow Step 10
        For j = 1 To 10
            Cells(i, 1).Resize(10).Copy Cells(Rows.Count, 2).End(xlUp).Offset(1, 0)
        Next j
    Next i

    Cells(1, 2).Delete xlShiftUp

End Sub

Offset從第2行開始復制,因此我刪除了最后一個空的第一個單元格以將所有內容向上移動。

完全靈活的代碼

除了@DickKusleika的精美代碼之外,我還將展示一種使用數據數組的完全靈活的方法,您可以在其中定義替代的塊大小,重復次數以及通過常量開始的行。

Option Explicit                                    ' declaration head of your code module

Sub copyBlocks()
Const SIZE& = 10, REPETITIONS& = 10, STARTROW& = 1 ' define block size, repetions and start row
Dim ws As Worksheet, i&, j&, k&, n&, v             ' declare variables
Set ws = ThisWorkbook.Worksheets("MySheet")        ' << change to your sheet name
n = ws.Range("A" & ws.Rows.Count).End(xlUp).Row    ' find last row number in column A
n = ((n + SIZE) \ SIZE) * SIZE                     ' round up to full block size of 10 rows
ws.Range("B:B") = ""                               ' clear column B
k = STARTROW                                       ' start row of 1st block series
For i = STARTROW To n Step SIZE                    ' if STARTROW = 1 For i=1, 11, 21, 31 ... To n
    v = ws.Range("A" & i).Resize(SIZE)             ' get next data block (10 rows)
    For j = 1 To REPETITIONS                       ' write eg. 10 data blocks to column B
        ws.Range("B" & (k + (j - 1) * SIZE)).Resize(SIZE) = v
    Next j
    k = k + SIZE * REPETITIONS                     ' get start row of next block series
Next i
End Sub

筆記

  • 聲明變量(及其類型),並通過在代碼模塊的聲明頭中聲明Option Explicit來強迫自己這樣做; “&”符號是&的縮寫,例如Dim i As Long v所有未明確聲明的變量默認為Variant
  • 始終使用完全合格的范圍引用,否則值默認為活動工作表,這可能會導致錯誤的值。
  • 變量n在A列中找到最后一行,並將其四舍五入為10行的完整塊大小。
  • 您可以輕松地在一個代碼行中將范圍值分配給變量二維數組,例如通過v = ws.Range("A1:E1234")v = ws.Range("A1:A17").Value 進一步的提示該數組的每個成員都可以通過行和列索引進行尋址。 請注意,從工作表范圍獲取值的數據字段數組是基於1的 ,因此第一個值將被尋址為v(1,1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM