excel将一个工作表根据条件拆分成多个工作表图文教程
本例介绍在excel中如何将一个工作表根据条件拆分成多个工作表。
注意:很多朋友反映sheets(i).delete这句代码出错,要注意下面第一个步骤,要拆分的数据工作表名称为“数据源”,而不是你新建工作簿时的sheet1这种。手动改成“数据源”即可。
操作步骤:
原始数据表如下(名称为:数据源),需要根据B列人员姓名拆分成每个人一个工作表。

点击【开发工具】-【Visual Basic】或者Alt+F11的快捷键进入VBE编辑界面。

如下图所示插入一个新的模块。


如下图,粘贴下列代码在模块中:
- Sub CFGZB()
- Dim myRange As Variant
- Dim myArray
- Dim titleRange As Range
- Dim title As String
- Dim columnNum As Integer
- myRange = Application.InputBox(prompt:="请选择标题行:", Type:=8)
- myArray = WorksheetFunction.Transpose(myRange)
- Set titleRange = Application.InputBox(prompt:="请选择拆分的表头,必须是第一行,且为一个单元格,如:“姓名”", Type:=8)
- title = titleRange.Value
- columnNum = titleRange.Column
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- Dim i&, Myr&, Arr, num&
- Dim d, k
- For i = Sheets.Count To 1 Step -1
- If Sheets(i).Name <> "数据源" Then
- Sheets(i).Delete
- End If
- Next i
- Set d = CreateObject("Scripting.Dictionary")
- Myr = Worksheets("数据源").UsedRange.Rows.Count
- Arr = Worksheets("数据源").Range(Cells(2, columnNum), Cells(Myr, columnNum))
- For i = 1 To UBound(Arr)
- d(Arr(i, 1)) = ""
- Next
- k = d.keys
- For i = 0 To UBound(k)
- Set conn = CreateObject("adodb.connection")
- conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
- Sql = "select * from [数据源$] where " & title & " = '" & k(i) & "'"
- Worksheets.Add after:=Sheets(Sheets.Count)
- With ActiveSheet
- .Name = k(i)
- For num = 1 To UBound(myArray)
- .Cells(1, num) = myArray(num, 1)
- Next num
- .Range("A2").CopyFromRecordset conn.Execute(Sql)
- End With
- Sheets(1).Select
- Sheets(1).Cells.Select
- Selection.Copy
- Worksheets(Sheets.Count).Activate
- ActiveSheet.Cells.Select
- Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
- SkipBlanks:=False, Transpose:=False
- Application.CutCopyMode = False
- Next i
- conn.Close
- Set conn = Nothing
- Application.DisplayAlerts = True
- Application.ScreenUpdating = True
- End Sub

5、如下图所示,插入一个控件按钮,并指定宏到刚才插入的模块代码。


6、点击插入的按钮控件,根据提示选择标题行和要拆分的列字段,本例选择“姓名”字段拆分,当然也可以选择C列的“名称”进行拆分,看实际需求。




7、代码运行完毕后在工作簿后面会出现很多工作表,每个工作表都是单独一个人的数据。具体如下图所示:

8、注意:
1)原始数据表要从第一行开始有数据,并且不能有合并单元格;
2)打开工作簿时需要开启宏,否则将无法运行代码。
以上就是excel将一个工作表根据条件拆分成多个工作表图文教程,希望能对大家有所帮助!
相关文章

阳历/农历转换对照表怎么做? Excel制作日历表/万年历的最终版
想要制作阳历/农历转换对照表,,通过这个对照表,你只需知道阳历日期,就可以快速准确的找到对应的农历日期,下面我们就来看看详细制作方法2025-04-10
工作上需要制作一个日历表/万年历,该怎么制作呢?我们需要使用三个excel函数来实现,详细请看下文介绍2025-04-10
Excel中有一个功能非常强大的函数,它就是SUMPRODUCT函数,既能求和、计数、权重计算,还能排名等,今天我们就来看看Excel根据权重求和的技巧2025-04-10
tocol函数哪个版本能用? excel中tocol函数的两种高级用法
TOCOL函数公式非常强大,值得一学,从字面意义可以理解出来,它是将数据转换成一列的,今天分享TOCOL函数的2种高级用法2025-04-10
Excel隐藏行和折叠行有什么不同? 隐藏行和折叠使用方法和区别介绍
excel表格进行操作的时候,发现有隐藏和和折叠行,看上去效果一样,都隐藏了,但是两者是有很大区别的,详细请看下文介绍2025-03-21
Excel工龄计算不再愁! Excel隐藏函数DATEDIF轻松计算精确到天级的工龄
在日常工作中,我们经常需要计算员工的工龄,以便进行人事管理、薪资调整等工作,本文将详细介绍如何在Excel表格中计算工龄,并提供多种实用方法供您选择2025-03-13
Excel数据处理遇到的问题,99%都是由于奇葩的数据格式造成的,今天跟大家整理了几个Excel表格构建的规则,先不要问为什么,照着做就对了2025-03-06
Excel透视表1月到12月不能排序怎么办? 数据透视表日期无法排序解决方法
如图对数据透视表日期进行升序排序后,仍不是我们想要的结果,有可能月份是文本,不能排列,下面我们就来看看详细解决办法2025-03-06
首先咱们得明确一下账龄的概念,简单来说,账龄就是某个账户的余额从产生到现在的时间长度,比如,一年以内的账龄就是那些在过去一年内产生的债权或债务,下面我们就来看看2025-03-06
实现办公自动化! DeepSeek搭配Excel制作自定义按钮的技巧
DeepSeek生成想要的代码很方便,如果将生成的代码放到excel中作为vba代码使用,岂不是能实现办公自动化?下面我们就来看看实现方法2025-03-05




最新评论