您的位置首页生活百科

Excel:总表拆分为工作表——VBA流

Excel:总表拆分为工作表——VBA流

的有关信息介绍如下:

Excel:总表拆分为工作表——VBA流

打开VBE界面,单击鼠标右键,在弹出的菜单中选择“插入”——“模块”,双击新生成的模块,运行代码,测试代码是否运行正常。每次修改、删除、增加总表记录的时候,再次点击按钮就可以自动更新数据!

步骤1:按ALT+F11组合键,打开VBE界面;

步骤2:在左边工程窗口处,单击鼠标右键,在弹出的菜单中选择“插入”——“模块”;

步骤3:双击新生成的模块,在右侧代码区,输入如下代码:

Sub拆分表()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

On Error Resume Next

Dim arr, brr, d

’“总表”是作者测试数据的工作表名称,如果你的总表工作表名称是其他的,如:XXX,把代码中所有的“总表”替换(CTRL+H)成XXX即可。

a = Sheets("总表").[B65000].End(3).Row

’A2:J & a是作者测试数据中的区域,大家可以改成自己的列表范围

arr = Sheets("总表").Range("A2:J" & a)

Set d = CreateObject("scripting.dictionary")

For i = 1 To UBound(arr)

’为什么是arr(i,8)呢?因为我们是按照数据范围中的第8列内容也就是“供应商”列拆分总表。大家可以按照自己的需要改成某列号即可,下面的arr(i,8)都是这样的修改方式。

d(arr(i, 8)) = d(arr(i, 8)) + ""

Next i

x = Sheets.Count

For j = x To 1 Step -1

If Sheets(j).Name <> "总表" Then

Sheets(j).Delete

End If

Next j

x = Sheets.Count

For Each dic In d

ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))

Sheets.Add after:=Sheets(x)

x = x + 1

Sheets(x).Name = dic

For i = 1 To UBound(arr)

If arr(i, 8) = dic Then

k = k + 1

For j = 1 To UBound(arr, 2)

brr(k, j) = arr(i, j)

Next j

End If

Next i

Sheets("总表").Range("1:1").Copy Sheets(x).Range("1:1")

’Range("A2"),是作者被粘贴区域的首个单元格,如果大家需要从其他部分粘贴,就把这里改一下。

Sheets(x).Range("A2").Resize(UBound(brr), UBound(brr, 2)) = brr

Erase brr

k = 0

Next

End Sub

步骤4:运行代码,测试代码是否运行正常。

步骤5:如果测试代码无误,将.XLSX文件另存为.XLSM文件(启用宏的EXCEL工作薄)。

很多学生在初学VBA的时候,经常会忘记另存为.XLSM文件,虽然也能保存,但是保存的是工作表区域的数据,VBE界面的代码是没有被保存的,辛苦付之东流。

虽然没有解释代码的含义,但却给出了代码的修改方式。这样一来,会VBA的同学可以看懂;而不会VBA的同学,可以根据不同的场景,修改代码。

个人建议

整体操作流程如下。