在VBA中复制除最后一列之外的行

时间:2017-12-01 12:38:21

标签: excel vba excel-vba

我正在编写Excel VBA宏,其中一项任务是将数据的子集从工作表复制到另一个。

我目前使用下面的内容,它将整行精确复制(C是行索引):

Dim ConsolidatedRow As Excel.Range
Set ConsolidatedRow = ConsolidatedSheet.Range("A" & C).EntireRow
...
ConsolidatedRow.Copy Destination:=ResultSheet.Range("A" & ResultRowIndex)

我想复制ConsolidatedRow,但没有最后一列。最后一列用于声明和复制之间的其他操作,因此理想的解决方案是更改复制语句。我尝试过补偿,更新了ConsolidatedRow中的范围以及其他所有内容,但没有运气。

2 个答案:

答案 0 :(得分:2)

我更喜欢使用Range.End属性来定位最后使用过的单元格。如果您的行没有延伸到工作表中的其他行,则可以帮助您解决问题。将Set ConsolidatedRow命令替换为以下内容:

With ConsolidatedSheet
    CopyExtent = .Range("A" & C).End(xlToRight).Column - 1
    Set ConsolidatedRow = .Range(.Cells(C, 1), .Cells(C, CopyExtent))
End With

这假设您的数据没有间隙。如果要在复制的部分中包含空白单元格,请更改为:

CopyExtent = ConsolidatedSheet.Cells(C, .Columns.Count).End(xlToLeft).Column - 1

希望这有帮助!

答案 1 :(得分:1)

假设您在此工作表中未使用此consolidatedRow后面的列,请在设置后添加两行

Set ConsolidatedRow = Intersect(ConsolidatedSheet.UsedRange, ConsolidatedRow)
Set ConsolidatedRow = ConsolidatedRow.Resize(1, ConsolidatedRow.Columns.Count - 1)