| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2599 人关注过本帖
标题:EXCEL的表格拆分宏如何改写成VB6代码?附个人思路,求指导
只看楼主 加入收藏
kingwayer
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-3-24
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
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编辑过]

搜索更多相关主题的帖子: 如何 EXCEL 
2016-03-24 22:02
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:10 
表示没明白楼主的问题

本人QQ:775420425
2016-03-26 16:11
csl591
Rank: 4
等 级:贵宾
威 望:10
帖 子:78
专家分:92
注 册:2009-2-5
收藏
得分:0 
arr不是已经是一列的内容了吗?为什么还要用到arr(i,1)?因为arr这个数组是从工作表域中获取的,故是二维的,所以要用arr(i,1)表示第一个数据。
2016-04-12 10:54
快速回复:EXCEL的表格拆分宏如何改写成VB6代码?附个人思路,求指导
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028661 second(s), 12 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved