【问题标题】:Using .Rows In Excel VBA在 Excel VBA 中使用 .Rows
【发布时间】:2013-06-14 18:12:55
【问题描述】:

我在清理复制/粘贴时遇到问题。目前我有这个:

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

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

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

【问题讨论】:

  • 复制整行 -> 完成宏运行,然后插入一列。

标签: excel vba rows offset copying


【解决方案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来勾选复选框

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

【讨论】:

  • 这是有道理的。谢谢!
  • @Al.Sal 我用另一种可能的解决方案更新了我的答案,我自己使用一个,因为我的所有数据都包含在表格中。
猜你喜欢
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 2011-09-14
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多