You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于单元格值将行移动至其他工作表的宏实现需求

按作业ID拆分Excel工作表的VBA实现方法

完全可以实现这个需求,下面是对应的VBA宏代码,直接复制到Excel的VBA编辑器里就能用:

Sub SplitByJobID()
    Dim wsSource As Worksheet
    Dim wsNew As Worksheet
    Dim lastRow As Long
    Dim jobIDs As Collection
    Dim jobID As Variant
    Dim i As Long
    
    ' 指定源工作表(默认用当前激活的表,可改成具体表名如Sheets("数据源"))
    Set wsSource = ActiveSheet
    ' 获取K列最后一行的行号,自动适配数据范围变化
    lastRow = wsSource.Cells(wsSource.Rows.Count, "K").End(xlUp).Row
    
    ' 收集所有不重复的作业ID
    Set jobIDs = New Collection
    On Error Resume Next
    For i = 2 To lastRow
        jobIDs.Add wsSource.Cells(i, "K").Value, Key:=CStr(wsSource.Cells(i, "K").Value)
    Next i
    On Error GoTo 0
    
    ' 为每个唯一作业ID创建对应工作表并复制数据
    For Each jobID In jobIDs
        ' 在工作簿末尾新建工作表
        Set wsNew = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
        wsNew.Name = "作业ID_" & jobID
        
        ' 复制表头到新表第一行
        wsSource.Rows(1).Copy Destination:=wsNew.Rows(1)
        
        ' 筛选源表中当前作业ID的行,复制到新表第二行开始的位置
        wsSource.Range("A1:K" & lastRow).AutoFilter Field:=11, Criteria1:=jobID
        wsSource.Range("A2:K" & lastRow).SpecialCells(xlCellTypeVisible).Copy Destination:=wsNew.Rows(2)
        
        ' 取消源表的筛选状态
        wsSource.AutoFilterMode = False
    Next jobID
    
    MsgBox "拆分完成!"
End Sub

使用说明:

  1. 打开你的Excel文件,确保数据所在工作表处于激活状态
  2. 按下Alt+F11打开VBA编辑器
  3. 右键点击左侧的工作簿名称,选择「插入」→「模块」
  4. 将上面的代码粘贴到模块窗口中
  5. 按下Alt+F8,选择SplitByJobID宏并点击「执行」

代码特点:

  • 自动识别K列的所有数据范围,不用手动调整行号
  • 自动去重作业ID,每个ID只创建一个工作表
  • 新工作表自动命名为「作业ID_XXX」,清晰区分
  • 保留原表的表头和对应ID的所有数据行

内容的提问来源于stack exchange,提问作者Marianne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:22:53