簡體   English   中英

如何將一系列單元格復制到VBA中的另一列?

[英]How to copy a range of cells to another column in VBA?

工作環境:Excel 2013

目標:將C1:C9復制到B11:B19。 D1:D9至B21:B29。 E1:E9至B31:B39 .....

將所有范圍復制到B列后,將A1:A9復制到A11:A19(A21:A29 ....)

我的想法是:1.使用類似的方法選擇范圍

     range.end()

因為在我的某些工作表中,只有4個測試步驟。 所以我需要一種可以自我檢查列中使用的單元格的語法。

  1. 將范圍復制到B列。
  2. 在考慮頁面布局之間留出1行。

我的代碼是:

Worksheets("Master").Columns(3).UsedRange.Copy
Worksheets("Master").Range("B11").PasteSpecial

但似乎像Columns(i).UsedRange.Copy不起作用。 粘貼特殊作品。

我的問題是:

如何在列中選擇使用范圍? 列數不是固定的,這意味着某些工作表有40列,而另一些工作表可能有30列。

謝謝!

我附上了一張工作表的屏幕截圖,供您參考。 工作表的屏幕截圖

假設要復制的列中沒有更多數據,這應該可以工作

Sub copyToOneColumn()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Master")

    Dim startCol As Integer
    startCol = 3

    Dim endCol As Integer
    endCol = 10

    Dim startRange As Range
    Dim ra As Range


    For i = startCol To endCol
        Set startRange = ws.Range("A1").Offset(0, i - 1)
        Set ra = ws.Range(startRange, ws.Cells(Rows.Count, startRange.Column).End(xlUp))
        ra.Copy Destination:=ws.Range("B" & Rows.Count).End(xlUp).Offset(2, 0)
    Next i

End Sub

您可以直接進行復制(從技術上來說,這不是復制項,因為它不使用剪貼板),如下所示:

Range("B1").Resize(Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count,1) = Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Value

實際上,您正在查看B1,然后將其大小調整為一個范圍,以使其與此一起使用的A列中的列數: Range("A1:A" & range("A" & Rows.Count).End(xlUp).Row).Rows.Count

然后,使B列中的這個新范圍=等於A列中相同范圍的值。

請注意,如果您始終從第1行開始,則可以縮短此時間,但如果從其他行開始,我給您的代碼就足夠了。

您可以嘗試這樣的事情...

Sub CopyData()
Dim wsMaster As Worksheet
Dim lr As Long, lc As Long, r As Long, c As Long
Application.ScreenUpdating = False
Set wsMaster = Sheets("Master")
lr = wsMaster.Cells(Rows.Count, 1).End(xlUp).Row
lc = wsMaster.Cells(1, Columns.Count).End(xlToLeft).Column
r = lr + 2
If lr <= 9 Then
    For c = 3 To lc
        wsMaster.Range(wsMaster.Cells(1, c), wsMaster.Cells(lr, c)).Copy wsMaster.Range("B" & r)
        wsMaster.Range("A1:A" & lr).Copy wsMaster.Range("A" & r)
        r = wsMaster.Cells(Rows.Count, 2).End(xlUp).Row + 2
    Next c
End If
Application.ScreenUpdating = True
End Sub

暫無
暫無

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

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