按B列相同Sequence号动态批量剪切粘贴Excel数据的VBA需求
动态按Sequence编号批量剪切粘贴数据的VBA实现
处理180万个数据点时,需实现以下自动化操作:识别B列中连续的相同Sequence编号数据组,将每组数据剪切后粘贴到前一组数据区域的右侧。
找到的参考代码仅能处理固定范围(124行×14列)的剪切粘贴,无法根据相同Sequence编号的实际行数动态调整操作范围,不符合需求。
以下是适配动态行数的VBA代码,核心逻辑是先遍历B列分组相同Sequence的区域,再依次将每组数据移动到前一组的右侧:
Sub DynamicCutPasteBySequence() Dim ws As Worksheet Dim lastRow As Long, currentRow As Long, groupStart As Long Dim targetCol As Integer ' 设置操作工作表,可根据实际修改 Set ws = ThisWorkbook.ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row targetCol = 3 ' 初始目标列,从C列开始,即第一组数据右侧 groupStart = 1 ' 遍历B列分组相同Sequence的区域 For currentRow = 2 To lastRow + 1 ' 当Sequence变化或到达最后一行时,处理当前组 If ws.Cells(currentRow, "B").Value <> ws.Cells(currentRow - 1, "B").Value Or currentRow = lastRow + 1 Then Dim sourceRange As Range ' 确定当前组的范围(从groupStart到currentRow-1,包含所有列) Set sourceRange = ws.Range(ws.Cells(groupStart, 1), ws.Cells(currentRow - 1, ws.Cells(groupStart, ws.Columns.Count).End(xlToLeft).Column)) ' 将当前组剪切粘贴到目标列起始位置 sourceRange.Cut Destination:=ws.Cells(1, targetCol) ' 更新目标列:下一组粘贴到当前组右侧(列数增加当前组的列数) targetCol = targetCol + sourceRange.Columns.Count ' 更新下一组的起始行 groupStart = currentRow End If Next currentRow End Sub
代码说明
- 自动识别B列中连续相同的Sequence分组,无需提前指定每组行数
- 每组数据包含的列数会自动适配(取该组第一行的最后一列)
- 依次将每组数据粘贴到前一组的右侧,自动调整目标列位置
- 遍历逻辑高效,支持处理180万量级的数据
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

