如何按指定字段值筛选表格全列数据 为不同岗位生成独立sheet
Excel按岗位分类拆分工作表实现方法
下面提供两种常用实现方案,按需选择即可:
方案一:内置功能手动操作(无需代码,适合临时单次使用)
- 打开原始数据表,选中整个数据区域,点击顶部「数据」选项卡的「筛选」按钮,给表头添加筛选下拉箭头
- 点击Function列的筛选箭头,只勾选「Unpaid Student」,确认后页面仅展示该岗位的所有行数据
- 选中筛选出的所有内容(包含表头行),按下
Ctrl+C复制 - 点击底部工作表栏的「+」新建工作表,右键重命名为「Unpaid Student」,选中A1单元格按下
Ctrl+V粘贴 - 返回原始数据表,再次点击Function列的筛选箭头,取消「Unpaid Student」勾选,只勾选「Operator」,重复上述复制、新建工作表粘贴的步骤,新工作表命名为「Operator」即可
- 操作完成后回到原始表,点击「数据」选项卡的「筛选」按钮即可取消筛选状态
方案二:VBA脚本自动拆分(适合数据量大、需重复操作的场景)
- 打开目标Excel文件,按下
Alt+F11调出VBA编辑器 - 右键点击左侧面板中的当前工作簿名称,选择「插入」-「模块」
- 将以下代码粘贴到弹出的模块编辑窗口中:
Sub 按岗位拆分工作表() Dim rawSheet As Worksheet, newSheet As Worksheet Dim postList As Variant, post As Variant Dim lastRow As Long, i As Long ' 可根据实际情况修改以下参数 Set rawSheet = ThisWorkbook.Worksheets("Sheet1") ' 替换为你的原始数据表表名 postList = Array("Operator", "Unpaid Student") lastRow = rawSheet.Cells(Rows.Count, "C").End(xlUp).Row ' C对应Function所在列,列号不对应可修改 For Each post In postList ' 避免同名工作表报错,先删除已存在的同名表 On Error Resume Next Application.DisplayAlerts = False ThisWorkbook.Worksheets(post).Delete Application.DisplayAlerts = True On Error GoTo 0 ' 新建对应岗位的工作表 Set newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) newSheet.Name = post ' 复制表头 rawSheet.Rows(1).Copy Destination:=newSheet.Rows(1) ' 遍历复制对应岗位的所有行数据 For i = 2 To lastRow If rawSheet.Cells(i, "C").Value = post Then rawSheet.Rows(i).Copy Destination:=newSheet.Rows(newSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1) End If Next i ' 自动适配新表列宽 newSheet.Columns("A:D").AutoFit Next post MsgBox "工作表拆分完成" End Sub
- 确认参数修改正确后,按下
F5运行代码,即可自动生成两个对应岗位的工作表
内容的提问来源于stack exchange,提问作者Bruno Tavares
相关产品推荐
相关产品推荐

