【问题标题】:Excel VBA cut and paste rage repeatedlyExcel VBA剪切和粘贴反复风靡一时
【发布时间】:2021-04-09 00:22:00
【问题描述】:

我是使用 VBA 并尝试反复剪切和复制范围的新手。 我正在搜索并尝试我的代码,但无处可去...

例如,假设一个区域 (A1:M1084) 中的整个数据由 124 行和 13 列的块组成。 所以第一个块在 (A1:M124) 中。 第二个数据块当前位于 (A125:M248) 中,并且想将其剪切并粘贴到第一个块旁边,在中间留一个列空间 (N) 到 (O1:AA248)。 然后,重复该过程直到行的末尾(这次是 1084,但可以是任何其他数字),继续将下一个块(A249:M372)粘贴到第二个块旁边,到(AC1:AO248),依此类推...

如果有人能帮忙,不胜感激!

【问题讨论】:

  • 能否请您与您的愿望输出分享演示屏幕截图?所以我可以在这方面提供帮助。
  • 我刚看到你的消息,很抱歉我的回复晚了。我可以自己解决它,而且我得到了另一个比我的代码运行效率更高的答案。所以现在很好。非常感谢您的帮助。

标签: excel vba loops range paste


【解决方案1】:

毕竟,我自己经过这么多的试验和错误得到了答案。发布它是否可能有用。另外,如果有其他更高效的代码,我很乐意拥有!


Sub Cutrange()

  Dim i As Long
  Dim Lrow As Long
  Lrow = Cells(Rows.Count, 1).End(xlUp).Row

  Dim oRange As Range, dRange As Range
  Set oRange = Range(Cells(1, 1), Cells(124, 14))
  Set dRange = Cells(1, 1)

  For i = 1 To Lrow 
    oRange.Offset(124 * i).Cut Destination:=dRange.Offset(, 14 * i)
  Next i
End Sub

【讨论】:

    【解决方案2】:

    试试这样的。

    Sub MoveBlocks()
    
        Dim rowCount As Integer, colCount As Integer
        Dim inRow As Integer
        Dim blockSize As Integer
        Dim colOffset As Integer
    
        blockSize = 124
        rowCount = Range("A1").CurrentRegion.Rows.Count
        colCount = Range("A1").CurrentRegion.Columns.Count
    
        For inRow = blockSize + 1 To rowCount Step blockSize
            colOffset = Int(inRow / blockSize) * (colCount + 1)
            Range(Cells(1, 1), Cells(blockSize, colCount)).Offset(0, colOffset).Value2 = Range(Cells(1, 1), Cells(blockSize, colCount)).Offset(inRow - 1, 0).Value2
            Range(Cells(1, 1), Cells(blockSize, colCount)).Offset(inRow - 1, 0).ClearContents
        Next inRow
    End Sub
    

    【讨论】:

    • 非常感谢!在我自己弄清楚之前,我没有看到你的答案。我可以从您的回答中学到很多东西,我不需要像以前那样手动计算列数!
    • 对不起,我不知道我必须接受答案。你的回答太棒了——工作效率很高!再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    相关资源
    最近更新 更多