EXCEL的表格拆分宏如何改写成VB6代码?附个人思路,求指导
程序代码:
Sub chaifen() '按条件拆分成表保存为工作簿在同文件夹内 Dim wb As Workbook, arr, rng As Range, d As Object, k, t, sh As Worksheet, i& Set rng = Range("A1:c1") Application.ScreenUpdating = False Application.DisplayAlerts = False arr = Range("b1:b" & Range("b65536").End(xlUp).Row) 'arr是查找关键字的列,在VB6中可以用UsedRange.Rows.Count这个来代替End(xlUp).Row Set d = CreateObject("scripting.dictionary") '这里是创建一个字典 For i = 2 To UBound(arr) 'UBound是取arr这个数组的限? If Not d.Exists(arr(i, 1)) Then '只知道Exists括号里的是Key Set d(arr(i, 1)) = Cells(i, 1).Resize(1, 4) '这句结合上面的arr的列,是不是说,B列第i行的格子的内容,如果不是关键字, Else '(续上行)就把它的范围扩大成1行4列大小。然后添加到字典里去 Set d(arr(i, 1)) = Union(d(arr(i, 1)), Cells(i, 1).Resize(1, 4)) '这行的意思是,把已经有的关键字的格子(已扩大到1行4列), End If '(续上行)和再出现的关键字的格子(还是扩大到1行4列)“合并” Next k = d.Keys '这行向下的内容,能懂一点。 t = d.Items For i = 0 To d.Count - 1 '这里不知道为什么要-1 Set wb = Workbooks.Add(xlWBATWorksheet) With wb.Sheets(1) rng.Copy .Range("A1") t(i).Copy .Range("A2") '有点不太懂,在后面会说到。 End With wb.SaveAs Filename:=ThisWorkbook.Path & "\分表\" & k(i) & ".xls" wb.Close Next Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox "完毕" End Sub
问题
1.arr不是已经是一列的内容了吗?为什么还要用到arr(i,1)呢,是不是说arr可以不限制在1列里,可以查完一列又一列。那么扩展一下,可不可以把2个或以上的个不相邻区域设置为查找的区域呢?
2.字典的key和item的关系是怎样的呢?我只知道key是唯一的,并且一个key可以对应好多个item。但是,它们的关系是k1对应了i1,i2,i3,k2对应i4,i5,i6。还是k1对应的是k1的i1,i2,i3,k2也对应了自己的i1,i2,i3?
3.VB6里有没有和Union一样起联合不同区域的代码呢?我想到的是,把已经查到的和新查到的用一个东西存起来,然后一次过弄到新表格里去。
------
一些说明
1.想要的效果:
假设我的表格里有100行*10列的数据,我要在B2到B100的内容里查找关键字,比如查到有20行是1的,把这20行用新表格存起来。
2.实现的方法:
可能用上面的代码不一定能实现,大方向可能还是用字典法,那么有没有其它的方法可以实现我要的效果呢。
小白第一次发帖,存分不多,望各位大神能抽空指点,10分奉上。非常感谢。
工作簿11.zip
(12.68 KB)
[此贴子已经被作者于2016-3-24 22:04编辑过]