{collapse}
{collapse-item label="代码"}
Sub NewSheets()
Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x&
Dim Rng As Range, Rg As Range, tRow&, tCol&, aCol&, pd&
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set d = CreateObject("scripting.dictionary")
Set Rg = Application.InputBox("请您框选拆分依据列!只能选择单列单元格区域!", Title:="提示", Type:=8)
tCol = Rg.Column
tRow = Val(Application.InputBox("请您输入总表标题行的行数?"))
If tRow = 0 Then MsgBox "您未输入标题行行数,程序退出!": Exit Sub
Set Rng = ActiveSheet.UsedRange
arr = Rng
tCol = tCol - Rng.Column + 1
aCol = UBound(arr, 2)
For i = tRow + 1 To UBound(arr)
If Not d.exists(arr(i, tCol)) Then
d(arr(i, tCol)) = i
Else
d(arr(i, tCol)) = d(arr(i, tCol)) & "," & i
End If
Next
For Each sht In Worksheets
If d.exists(sht.Name) Then sht.Delete
Next
kr = d.keys
For i = 0 To UBound(kr)
If kr(i) <> "" Then
r = Split(d(kr(i)), ",")
ReDim brr(1 To UBound(r) + 1, 1 To aCol)
k = 0
For x = 0 To UBound(r)
k = k + 1
For j = 1 To aCol
brr(k, j) = arr(r(x), j)
Next
Next
With Worksheets.Add(, Sheets(Sheets.Count))
.Name = kr(i)
.[a1].Resize(tRow, aCol) = arr
.[a1].Offset(tRow, 0).Resize(k, aCol) = brr
Rng.Copy
.[a1].PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.[a1].Select
End With
End If
Next
Sheets(1).Activate
Set d = Nothing
Erase arr: Erase brr
MsgBox "数据拆分完成!"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
{/collapse-item}
{collapse-item label="使用教程" open}
- 左键双击打开素材文件【自动拆分.xlsx】Microsoft Excel工作表。要编辑VBA代码,首先我们需要打开【Visual Basic编辑器】,右键单击【总表】工作表,左键单击右键菜单中的【查看代码(V)】即可打开【Visual Basic编辑器】。
- 编辑VBA代码。左键单击【工程资源管理器】中的【Sheet1 总表】后,在右侧代码窗口中键入以下代码,您也可以选择复制粘贴。代码输入完成后,不需要保存,直接关闭【Visual Basic编辑器】即可。
- 插入一个矩形。单击右键,指定宏。
- 选中宏,确定即可。
- 开始拆分。
{cloud title="自动拆分例表" type="default" url="https://www.wasss.cn/usr/uploads/2021/11/1698591670.zip" password=""/}
{/collapse-item}
{/collapse}
哈哈哈,写的太好了https://www.lawjida.com/
1
1
1
真棒!
1
1
555
文章的确不错啊https://www.cscnn.com/
看的我热血沸腾啊https://www.237fa.com/
1
1
555
欢迎加入 Typecho 大家族