excel表怎么增加列 c++_Excel通用总表按指定列一键分发工作表

上篇说了EXCEL一键汇总汇总多个工作表,今天来个逆过程,总表按指定列一键分发工作表。

这次是在上篇的基础上进行设置。

首先还是先看效果:

734eb0713da3d8452d4e8415dc267583.gif

然后是快捷键设置:

a1b1dfedacfb09a272fe59b59473e9ac.gif

TXT文档里面的是VBA代码

代码如下:

Sub 总表__工作表()

Dim wb1, wb As Workbook

Dim p As String

Dim d As Object

Dim a, b, i As Integer

Dim key, e

Set wb1 = ActiveWorkbook

Set d = CreateObject("scripting.dictionary")

'指定要保存的文件夹

With Application.FileDialog(msoFileDialogFolderPicker)

.InitialFileName = ActiveWorkbook.Path

.Title = "请指定要保存的文件夹"

If .Show = -1 Then

p = .SelectedItems(1)

Else

Exit Sub

End If

End With

'将指定列的值填充字典进行去重

b = Val(InputBox("请输入表头行数"))

If b = 0 Then

Exit Sub

End If

a = Val(InputBox("请输入要拆分表的列数"))

Application.ScreenUpdating = False

If a = 0 Then

Exit Sub

End If

e = Timer

irow = Sheets(1).Range("A65536").End(xlUp).Row

For i = b + 1 To irow

d(Sheets(1).Cells(i, a).Value) = d(Sheets(1).Cells(i, a).Value) + 1

Next

'新建工作表并分发数据,以字典关键字命名

arr = d.keys()

If wb1.Sheets(1).AutoFilterMode = True Then

wb1.Sheets(1).Range("a" & b & ":z" & irow).AutoFilter '判断是否刷选,如果是则取消刷选

End If

For Each key In arr

wb1.Sheets(1).Range("a" & b & ":z" & irow).AutoFilter field:=a, Criteria1:=key

Set wb = Workbooks.Add

wb1.Sheets(1).Range("a1:z" & irow).Copy

wb.Sheets(1).Range("a1:z" & irow).PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False '复制列宽

wb1.Sheets(1).Range("a1:z" & irow).Copy wb.Sheets(1).Range("a1")

wb.SaveAs p & "" & key & ".xlsx"

wb.Close

wb1.Sheets(1).Range("a" & b & ":z" & irow).AutoFilter

Next

MsgBox "分发完毕,用时" & Timer - e & "秒。"

Application.ScreenUpdating = True

End Sub

有几个要注意的地方:

1、运行的时候会要求输入表头行数和指定分发列,必须输入数字。2、分发的工作表的格式,列宽可以同步分发,行高不行。

下次说从总表分发到工作簿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值