![](/img/trans.png)
[英]VBA: How to concatenate range of cells in a column with strings and generate it in another column?
[英]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個測試步驟。 所以我需要一種可以自我檢查列中使用的單元格的語法。
我的代碼是:
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.