如何复制变量范围vba
我的表包含我感兴趣的可变行数和三列(A:C)如何复制变量范围vba,vba,Vba,我的表包含我感兴趣的可变行数和三列(A:C) A B C D 1 xx xx xx xxx 2 .... 3 .... 4 ... 我需要从工作表1复制到工作表2 ws2.Range("A1").Value = ws1.Range("A1:C4").Value 问题是我不想硬编码C4,因为它可以是C5或c2。如何解释可能的可变行数 PS:我不能使用Range(“A1”)。CurrentRegion因为这将选择比需要更多的列,即列D值也将被选择。虽然它会选择正
A B C D
1 xx xx xx xxx
2 ....
3 ....
4 ...
我需要从工作表1
复制到工作表2
ws2.Range("A1").Value = ws1.Range("A1:C4").Value
问题是我不想硬编码C4
,因为它可以是C5
或c2
。如何解释可能的可变行数
PS:我不能使用
Range(“A1”)。CurrentRegion
因为这将选择比需要更多的列,即列D
值也将被选择。虽然它会选择正确的行数,但大多数问题都有不止一种解决方案,但由于CurrentRegion
方法返回正确的行数(但列数错误),因此可以这样做,假设您始终需要三列
Dim rng as Range
Set rng = ws1.Range("A1").CurrentRegion.Resize(,3)
ws2.Range(rng.Address).Value = rng.Value
我假设D中的最后一行等于或小于A:C的最后一行。我还假设最后一行由包含数据的最后一行确定
Sub CopyColumnAtoC()
Dim lastRow As Long
lastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
ThisWorkbook.Worksheets(1).Range("A1:C" & lastRow).Copy
ThisWorkbook.Worksheets(2).Range("A1:C" & lastRow).PasteSpecial xlPasteValues
End Sub
可以仅指定范围中的列。所以
Sheet2.Range(Sheet1.Range("A:C").Address).Value = Sheet1.Range("A:C").Value
将复制A列到C列,而不考虑每列中的行,即,如果A列有8行,B列有6行,C列有11行,它仍将工作。所选最后一行下面的行是否包含数据?您的表是ListObject吗?如果是这样,这是非常容易的。如果没有,您需要一些VBA来确定表格“结束”的位置,这可能会有点困难,具体取决于您的工作表的布局。您可能没有偶然发现,所以请尝试一下?一旦您开始使用
Resize
和Offset
,您的世界将不再相同:)打字(A2:C…)应该是A1。此外,根据OP分配范围的.Value
的方法,您可以避免主动使用.Copy
方法来复制/粘贴值。干杯@大卫,谢谢你指出错误。我明确使用复制粘贴作为安全防护,以防我关于D列更长的假设是错误的。如果D列较长,则A:C的相应行可能包含#N/A