【问题标题】:VBA Looping IterationVBA 循环迭代
【发布时间】:2023-03-22 16:24:01
【问题描述】:

我需要有关此代码的帮助。它可以工作,但我想让它变成一个循环,而不是手动输入另一行代码。所以基本上不是有 3 块代码,我希望它是一个块。

ActiveCell.Offset(1, 0).Range("A1:D1").Select
Selection.Cut
ActiveCell.Offset(-1, 4).Range("A1").Select
ActiveSheet.Paste

ActiveCell.Offset(2, -4).Range("A1:D1").Select
Selection.Cut
ActiveCell.Offset(-2, 8).Range("A1").Select
ActiveSheet.Paste

ActiveCell.Offset(3, -8).Range("A1:D1").Select
Selection.Cut
ActiveCell.Offset(-3, 16).Range("A1").Select
ActiveSheet.Paste

应该是这样的:

Loop 3{
ActiveCell.Offset(1, 0).Range("A1:D1").Select
Selection.Cut
ActiveCell.Offset(-1, 4).Range("A1").Select
ActiveSheet.Paste
}

我不确定如何遍历 VBA 中的单元格。谢谢!

编辑:

这就是我想要做的。谢谢

1   2   3   4                   
5   6   7   8          -->       1 2 3 4 5 6 7 8 9 10 11 12
9   10  11  12

【问题讨论】:

  • ActiveCell.Offset(-1, 4).Range("A1") 究竟应该指向什么?

标签: excel vba loops iteration


【解决方案1】:

你可以不用每次都选择,试试这个:

For i = 1 To 3

    ActiveCell.Offset(i, 0).Range("A1:D1").Cut ActiveCell.Offset(0, i * 4)

Next i

【讨论】:

  • 您的偏移量与问题不太相符
  • 我认为原始问题中的偏移量有错字(特别是第三次迭代中的偏移量),我的解决方案根据 OP 编辑​​的问题产生了正确的结果。
【解决方案2】:

这个答案与@Valon 的答案几乎相同,但我不想继续使用Range("A1:D1") 规范,因为它相当不寻常。相反,我使用.Resize() 来获取与ActiveCell 相邻的单元格。

Dim i As Long
For i = 0 To 2
    ActiveCell.Resize(, 4).offset(i, 0).Cut ActiveCell.offset(0, i * 4)
Next i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-27
    • 2015-11-14
    • 2019-01-22
    • 2015-05-04
    • 2017-06-10
    • 2014-01-07
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多