高人请入,excel救急,关于工作表分拆VBA
- xin.h需要把一个工作表按D列中的项目分拆成多个表格,在网上搜了一圈,找到一个可用的实例,但是按A列分拆的,我想把宏修改成D列分拆,但无法实际,修改后新工作表复制的数据不完整。帮忙看看VBA代码怎么修改。
应该实现的效果
运行宏后的效果 - carter071代码能发一下吗 家里电脑装的wps 宏不好用 懒得装office了
- xin.h回复2#carter071复制代码
- Private Sub CommandButton1_Click()
- Dim d As New Dictionary '字典,引用Microsoft Scripting Runtime
- Dim cn As New ADODB.Connection 'ADO,引用Microsoft ActiveX Data Objects 2.x Library
- Dim rst As New ADODB.Recordset
- Dim i&, n%, LastRow&, arr, rng As Range, sh As Worksheet
- Dim sql$, ThisSheetName$
- Set rng = Range("A1:AA2")
- ThisSheetName = Me.Name '工作表名
- LastRow = Range("A65536").End(xlUp).Row - 1 'A列最后单元格的行号
- arr = Range("d1:d" & LastRow) '原来是A1:A 我修改成D列
- Application.ScreenUpdating = False '关闭屏幕刷新
- For i = 3 To LastRow '循环A列
- d(arr(i, 1)) = 0 '添加到字典
- Next
- Application.DisplayAlerts = False
- For Each sh In Sheets
- If d.Exists(sh.Name) Then sh.Delete
- Next
- Application.DisplayAlerts = True
- cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;hdr=no';data source=" & ThisWorkbook.FullName '打开链接
- For n = 0 To d.Count - 1
- sql = "select * from [" & ThisSheetName & "$d3:aa" & LastRow & "] where f1='" & d.Keys(n) & "'" '设置SQL语句 原来为a3:aa 我修改成D3列
- Set rst = cn.Execute(sql)
- Worksheets.Add(after:=Sheets(Sheets.Count)).Name = d.Keys(n)
- With ActiveSheet
- rng.Copy .Range("A1")
- .Range("A3").CopyFromRecordset rst '复制查询结果
- End With
- Next
- rst.Close: Set rst = Nothing
- cn.Close: Set cn = Nothing: Set d = Nothing
- Me.Activate
- Application.ScreenUpdating = True
- End Sub
- Private Sub CommandButton1_Click()
- xin.h还是没弄好
- 交通银行mark下,我最近也在搞这个。
- ljq29没看懂
你咋把皮鞋拆分出2417的?HiPDA怪兽版 - fuqiang659前两天用了npoi发现比vba好用多了
- zhihuiwang100不懂,我也需要用,mark下
- wwwEagle导入到Access,想干啥都行。
- zhihuiwang100谢谢,mark
- cjzstc注释太少了,变量命名也很随意,看着就头疼
- qq149971093第二集还是第三集就可以解决问题,而且代码也比上面的简单。
- nostoryboy把表放到BI里会快很多吧
- z45680338马克一下
- cxbdemail$d3:aa改成$d3:d
- 大部头书复制代码
- Sub SplitToSheet()
- Sheets(1).Select
- Set l3 = Application.InputBox("请选择需要拆分的列", "选择列", "", , , , , 8)
- Application.ScreenUpdating = False
- Set d = CreateObject("scripting.dictionary")
- arr = Sheets(1).UsedRange
- For j = 2 To UBound(arr)
- If d.exists(arr(j, l3.Column)) Then
- Set d(arr(j, l3.Column)) = Union(d(arr(j, l3.Column)), Sheets(1).Cells(j, l3.Column))
- Else
- Set d(arr(j, l3.Column)) = Union(Sheets(1).Cells(1, 1), Sheets(1).Cells(j, l3.Column))
- End If
- Next j
- For j = 0 To d.Count - 1
- Sheets.Add after:=Sheets(Sheets.Count)
- Sheets(Sheets.Count).Name = d.keys()(j)
- d.items()(j).EntireRow.Copy Sheets(Sheets.Count).Cells(1, 1)
- Next j
- Application.ScreenUpdating = True
- Sheets(1).Select
- End Sub
- Sub SplitToSheet()
- mch200438你应该发个你没修改过的版本吧,不然不是还得帮你先纠错
- xin.h感谢!这个是13年的帖子,问题解决了
- 2Bpencilpilot chart筛选后可以自动拆成多个表,楼主要不找教程学学