excel - 使用取决于活动行的偏移动态范围进行剪切和粘贴
问题描述
对 VBA 来说真的很新,所以请原谅我说/做的任何愚蠢的事情。到目前为止,这个网站对我的加速学习有很大的帮助。
我在 Excel 中有一组数据,需要使用 VBA 重新排列。我想从列 AF:AR 中获取(剪切)数据,并将其移动(粘贴)到插入原始行下方的新行中的列 J:V 中。每次我运行报表时,数据集的大小都不同,因此我从数据集的末尾开始接近它,并在电子表格中向上移动。数据集有标题,所以停在第2行。我目前的计划是移动到数据集的末尾,从最后一行剪切数据并将其粘贴到下面的行,在上面插入一个空白行,然后向上移动一行并重复,直到到达第 2 行。
这是我到目前为止所拥有的:
' Move to end of data.
Selection.End(xlDown).Select
' Repeat loop until top of data is reached..
Do Until ActiveCell.Row = 2
' Get row address of active cell.
ActiveRow = ActiveCell.Row
' Cut and paste data to row below current row.
Range(Cells(ActiveRow, "AF"), Cells(ActiveRow, "AR")).Cut Range("J" & ActiveRow).Offset(1, 0)
' Insert a blank row above.
ActiveCell.Offset(-1, 0).Select
ActiveCell.EntireRow.Insert Shift:=xlDown
' Move to next row of data up.
ActiveCell.Offset(-1, 0).Select
Loop
运行时,我收到此错误
“运行时错误‘1004’:应用程序定义的或对象定义的错误。”
并调试指向以下行:
Range(Cells(ActiveRow, "AF"), Cells(ActiveRow, "AR")).Cut Range("J" & ActiveRow).Offset(1, 0)
我找不到任何关于在 .Cut 函数中使用带偏移的动态范围的信息,所以这可能是问题所在。我的语法有什么错误/遗漏,还是有更简单的方法来实现我的目标?
提前感谢您分享您的天才。
解决方案
这更干净,更快,但仍然有选择和激活荆棘。我可能会回去继续努力,但它现在有效。
'Define the range of remaining data.
Set rngData = ThisWorkbook.Worksheets("Sheet2").Range("A1")
Set rngData = rngData.CurrentRegion
' Move to end of data.
rngData.End(xlDown).Select
Do Until ActiveCell.Row = 1
' Get row address of active cell.
ActiveRow = ActiveCell.Row
' Cut and paste OCC data to row below current row.
Range(Cells(ActiveRow, "AF"), Cells(ActiveRow, "AR")).Cut Range("J" & (ActiveRow + 1))
' Insert a blank row above.
ActiveCell.EntireRow.Insert Shift:=xlDown
Selection.Offset(-1, 0).Select
' Repeat until top of data is reached.
Loop
' Delete unnecessary remaining column headers.
ThisWorkbook.Worksheets("Sheet2").Range("AF1:AR1").Clear
' Delete Unnecessary blank row #2.
Range("A2").EntireRow.Delete