Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何复制变量范围vba_Vba - Fatal编程技术网

如何复制变量范围vba

如何复制变量范围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: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
值也将被选择。虽然它会选择正确的行数,但大多数问题都有不止一种解决方案,但由于
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