【问题标题】:VBA Excel Loop Copy and PasteVBA Excel循环复制和粘贴
【发布时间】:2015-12-02 05:10:55
【问题描述】:

我正在尝试循环代码,因此我不必每次都手动输入单元格范围。

子副本()

Dim x As Range
Dim y As Range
Set x = Range("C24361:F24363")
Set y = Range("P1")

x.copy
y.Select
ActiveSheet.Paste

x.Offset(5, 0).copy
y.Offset(3, 0).Select
ActiveSheet.Paste

x.Offset(10, 0).copy
y.Offset(6, 0).Select
ActiveSheet.Paste

x.Offset(15, 0).copy
y.Offset(9, 0).Select
ActiveSheet.Paste

x.Offset(54, 0).copy
y.Offset(12, 0).Select
ActiveSheet.Paste

x.Offset(59, 0).copy
y.Offset(15, 0).Select
ActiveSheet.Paste

x.Offset(64, 0).copy
y.Offset(18, 0).Select
ActiveSheet.Paste

x.Offset(69, 0).copy
y.Offset(21, 0).Select
ActiveSheet.Paste

x.Offset(108, 0).copy
y.Offset(24, 0).Select
ActiveSheet.Paste

x.Offset(113, 0).copy
y.Offset(27, 0).Select
ActiveSheet.Paste

x.Offset(118, 0).copy
y.Offset(30, 0).Select
ActiveSheet.Paste

x.Offset(123, 0).copy
y.Offset(33, 0).Select
ActiveSheet.Paste

x.Offset(162, 0).copy
y.Offset(36, 0).Select
ActiveSheet.Paste

x.Offset(167, 0).copy
y.Offset(39, 0).Select
ActiveSheet.Paste

x.Offset(172, 0).copy
y.Offset(42, 0).Select
ActiveSheet.Paste

x.Offset(177, 0).copy
y.Offset(45, 0).Select
ActiveSheet.Paste

结束子

现在我抓住指定的范围...并删除三个副本..粘贴..etc..一旦制作了 4 个副本...我需要删除 54 并运行相同的 drop 5 副本(所以 59)。 .并继续粘贴 3 滴...关于我如何完成这项任务的任何线索?

谢谢你

【问题讨论】:

  • 有点困惑...所以首先是5,10,15,54,然后是5,10,15,5910,15,20,59
  • 是的。所以它是一个副本,然后向下移动 5、10、15,然后是 54(这些由 5 分隔),所以 59、64、69,然后是 108、113、118、123,然后是 162(+5+5 等)。 .在英语中,我需要制作 100 个 4 3x4 副本,每组 4 个 3x4 的第一个单元格由每个城市的 54 个单元格分隔(因此从 54、108、162 开始)。有道理?谢谢
  • 54 是跳到下一组 4 个 3x4s,因为第一个单元格距离我制作的原始副本 54 远(在本例中为 C7)。另外它跳五的原因是每个 3x4 的第一个单元格距离为 5 个单元格。
  • 那么5,10,15,54 之后是什么?你能在上面的问题中写第二组复制粘贴代码,以便我明白你的意思吗?
  • 我又写了几组..所以在复制了前 4 组 3x3 后,它跳了 54...然后你看到了 3 组 3x3 ..然后是 108...3 组。 ..162 等

标签: vba loops copy offset paste


【解决方案1】:

对于套装:

Option Explicit

Sub copySets()
    Const ITERATIONS As Long = 5    'repeated sets of 4 ranges appended
    Const TOTAL_UNIT As Long = 4    'one unit contains 4 ranges
    Const RNG_OFFSET As Long = 2    'one range is 3 rows
    Const TB         As Long = 54   'offset between units

    Dim ws As Worksheet, rng As Range, rngRows As Long, setRows As Long, fSet As Range
    Dim cl1R As Long, cl1C As Long, cl2R As Long, cl2C As Long, i As Long, j As Long

    Set ws = ThisWorkbook.ActiveSheet
    With ws
        cl1R = 7:   cl1C = 3:   cl2R = 9:   cl2C = 6  'Range("C7") and Range("F9")
        Set rng = .Range(.Cells(cl1R, cl1C), .Cells(cl2R, cl2C))

        rngRows = cl2R - cl1R + 1       'rows in range unit
        setRows = rngRows + RNG_OFFSET  'rows in range unit + offset rows between units

        For i = 1 To ITERATIONS
            If fSet Is Nothing Then Set fSet = rng Else Set fSet = Union(fSet, rng)
            For j = 1 To TOTAL_UNIT - 1
                Set fSet = Union(fSet, rng.Offset(setRows * j, 0))
            Next
            Set rng = .Range(.Cells(cl1R + (TB * i), cl1C), .Cells(cl2R + (TB * i), cl2C))
        Next

        fSet.Copy .Cells(((rngRows * j) * i) - ((rngRows * TOTAL_UNIT) * i) + 1, 16)
    End With
End Sub

测试文件:

加法

复制城市:

Sub copyCities()
   Const CP As Long = 5    'copy-paste repeated (iterations)
   Const CC As Long = 2    'copy column (Col "B": cities)
   Const CO As Long = 54   'offset between copied cells (cities)
   Const PC As Long = 16   'paste column (Col "P" = 16)
   Const PO As Long = 12   'paste offset

   Dim i As Long

   With ThisWorkbook.ActiveSheet
    For i = 0 To CP - 1
     .Range(.Cells((i * PO) + 1, PC), .Cells((i * PO) + PO, PC)) = .Cells((CO * i) + 1, CC)
    Next
   End With
End Sub

【讨论】:

  • 嗨,保罗。感谢您的代码。我试图运行它,但它似乎没有执行。数据设置为每个数据范围的第一个单元格相隔 54 个单元格。这就是为什么您在第二次复制和粘贴时看到 54、59、64、59 的原因。每个都有 +5 的原因是,对于 4 个 3x4 数据范围中的每一个,两者之间有两条线的间隙。所以第一个范围的第一个单元格距离第二个范围 5 个单元格(依此类推 2 次)。这就是 54...108...162 以及每个之后的 +5 的来源。
  • 在这种特殊情况下,“一张图片值得 1,000 字”:) 我将制作一个快速测试文件,并在我的答案中发布一张图片:让我知道我应该如何调整它代码可以复制正确的范围
  • OK 完美!是的,它有效,你是对的。由于某种原因,它停止了。什么可能导致循环停止? (对不起,我是经济学家而不是计算机科学家。有什么方法可以指定一个点,例如 C1000000 并让它停在那里?
  • 如果您没有提到任何错误,它停止的唯一原因是 Const ITERATIONS As Long = 5(函数顶部)。将其从 5 更改为您要复制的任意数量的集合(一个集合包含 4 个范围)。如果您对某事不确定,也没有问题 - 只要让我知道您不清楚的地方,不管用什么术语;)
  • 我想只有一个?不确定。所以复制B1。将其粘贴到 P1 中。复制 B55。粘贴 P13。复制 B109。将其粘贴在 P25 中。城市在 b 列中由 54 分隔...我需要在 p 列中将粘贴分隔为 12。老实说,如果您可以将 B1 粘贴到 P1:P12 中,那将更加神奇。 (以及 P13:P24 中的 B55 等)我非常感谢您的所有帮助。那有意义吗?和上一个代码非常相似。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 2020-08-10
相关资源
最近更新 更多