0

我在使复制/粘贴干净时遇到问题。目前我有这个:

If distanceValue <= distanceParameter Then
    sh2.Rows(i).Copy _
    sh3.Rows(i).Offset(0, 1)
End If

sh2 和 sh3 已正确定义,并且位于 for 循环内;那不是问题。Range 使用起来似乎很混乱,因为我必须定义一个 lastcolumn 变量等。无论如何用 .Rows 来做到这一点?

目标是将满足条件的行复制到另一张工作表,但将 A 列留空。任何有关清洁解决方案的反馈(我知道这是错误的)将不胜感激。

4

1 回答 1

1

如果您偏移一列,您的复制范围(如果您复制整行)将大于您的粘贴范围。无法将 16384 列粘贴到 16383 中,空间不足。

如果您不想使用范围功能,则必须复制整行,然后在前面添加一列。

或者,您可以在复制粘贴之前将该列添加到源数据中,如果需要,在完成时删除这些列。

Sub Sample()
Dim sh2 As Worksheet, sh3 As Worksheet

Set sh2 = Worksheets("Sheet1")
Set sh3 = Worksheets("Sheet2")

If distanceValue <= distanceParameter Then
    sh2.Rows(i).Copy _
    sh3.Rows(i)
End If

sh3.Columns("A").insert
End Sub

或者

Sub Sample()
Dim sh2 As Worksheet, sh3 As Worksheet

Set sh2 = Worksheets("Sheet1")
Set sh3 = Worksheets("Sheet2")

sh2.Columns("A").insert

If distanceValue <= distanceParameter Then
    sh2.Rows(i).Copy _
    sh3.Rows(i)
End If

'The next line is to return the source data back to the original format remove if not needed

sh2.Columns("A").Delete

End Sub

您的最后一个选择也是最动态的将是使用 listobject/DataTable 而不是 excel 范围。如果可能的话。

如果你已经有一个表那么你可以简单地使用:

Sub Sample()
Dim sh2 As Worksheet, sh3 As Worksheet
Dim rngCurrentRow As Range

Set sh2 = Worksheets("Sheet1")
Set sh3 = Worksheets("Sheet2")

Set rngCurrentRow = sh2.ListObjects("YourTableNameHere").ListRows(i).Range

If distanceValue <= distanceParameter Then
    rngCurrentRow.Copy _
    sh3.Cells(i, 2)
End If

End Sub

将范围制作成表格非常容易,如果您的数据不包含空白,只需单击范围中的第一个单元格并按Ctrl+L这将选择您的范围,如果您需要增加范围的大小,因为它确实包含空格,然后简单地更改输入框以选择所有数据。

不要忘记是否有heade3rs来检查复选框

注意:如果您不确定您的表格名称,只需单击表格,然后在功能区上会弹出一个新选项卡,最后称为表格工具/设计。在该选项卡上,最左侧的区域包含您的表名,您可以将其更改为您想要的任何内容。

于 2013-06-18T13:53:19.187 回答