ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: yijiboo

[求助]一个文件里的3个表的另类拆分!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-12-10 23:07 | 显示全部楼层
有点麻烦。

TA的精华主题

TA的得分主题

发表于 2007-12-11 09:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim sh As Worksheet, bo1 As Workbook, bo2 As Workbook, bo3 As Workbook
Dim sh1 As Worksheet, arr, j%, m%, n%
Dim d As Object, x%, i%
m = 2: n = 1
Set d = CreateObject("scripting.dictionary")
For Each sh In Worksheets
    x = sh.Range("b65536").End(xlUp).Row
    For i = 2 To x
        If Not d.exists(sh.Range("b" & i).Value) Then
            d.Add sh.Range("b" & i).Value, ""
        End If
    Next i
Next sh
arr = d.keys
For i = 0 To UBound(arr)
    Set bo1 = Workbooks.Add: Workbooks("汇总").Activate
    For Each sh In Worksheets
        x = sh.Range("a65536").End(xlUp).Row
        Set sh1 = bo1.Worksheets(n)
        sh1.Name = sh.Name
        For j = 2 To x
            If sh.Range("b" & j).Value = arr(i) Then
                sh.Rows(j).Copy sh1.Range("a" & m)
                m = m + 1
            End If
        Next j
        m = 2: n = n + 1
    Next sh
    bo1.SaveAs ThisWorkbook.Path & "\" & arr(i) & ".xls"
    bo1.Close True: n = 1
Next i
Application.ScreenUpdating = True
End Sub

看看是不是这个意思。

TA的精华主题

TA的得分主题

发表于 2007-12-11 09:20 | 显示全部楼层
phh7EzrB.rar (20.18 KB, 下载次数: 21)
具体请查看附件,你下载附件后,点击这个工作表里面的按钮,就会自动生成另外三个工作表了。

TA的精华主题

TA的得分主题

发表于 2007-12-11 10:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
QUOTE:
以下是引用yijiboo在2007-12-11 10:47:44的发言:

TO:BobPan
你的代码是完全可以的。但运行后,这个 汇总.xls 里的3个表的每一列都成了筛选

的样子(最好是原来状态);另外,生成的3个文件里的每个表里都有“工作单位”

这一列和数据(恩,我的要求里是没有的这一列的)。

TO:lenghonghai

我是07版本的,运行时,提示下标越界.在" : Workbooks("汇总").Activate"这行.

还有噢,当数据量很大时候,比如这个 汇总.xls 里的3个表每个表都有1000行数据

,有300个不同的工作单位(就是要生成300个文件),代码里是不是要加点什么啊?

非常感谢!!

Set sh1 = bo1.Worksheets(n)
第一个问题我帮不了你,我的2003版本运行正常,对于你说要生成300个文件,你说的意思是B列有可以出现300个不同的值吗?如果是那样的话,也应该没有问题的,如果是生成300个文件已经可以了,如果在一个工作表中生成300多个工作表,不可以吧?一个工作簿好象最多可以容纳下255个。

哦对了,你用的2007版本,不知道能一起容纳下多少个呢?

如果可以容纳的话,可以把上一句代码略微改动一下,也就是改成:set  sh1=bo1.worksheets.add

这样的话,应该就可以了。

TA的精华主题

TA的得分主题

发表于 2007-12-18 15:01 | 显示全部楼层
QUOTE:
以下是引用mou250在2007-12-18 10:06:11的发言:

看了看lenghonghai的代码,做了局部的修改,但还是有问题不懂

'下面是sheet1的代码

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim sh As Worksheet, bo1 As Workbook, bo2 As Workbook, bo3 As Workbook
Dim sh1 As Worksheet, arr, j%, m%, n%
Dim d As Object, x%, i%
m = 2: n = 1
Set d = CreateObject("scripting.dictionary")
For Each sh In Worksheets
    x = sh.Range("b65536").End(xlUp).Row
    For i = 2 To x
        If Not d.exists(sh.Range("b" & i).Value) Then
            d.Add sh.Range("b" & i).Value, ""
        End If
    Next i
Next sh
arr = d.keys
For i = 0 To UBound(arr)
    Set bo1 = Workbooks.Add: Workbooks("汇总.xls").Activate

'将原有的“汇总”改为"汇总.xls"就不会有下标越界的情况了
    For Each sh In Worksheets
        x = sh.Range("a65536").End(xlUp).Row
        Set sh1 = bo1.Worksheets(n)
        sh1.Name = sh.Name
        sh.Rows(1).Copy sh1.Range("a" & 1)

'添加上面一句可以满足生成的每个表都有表头
        For j = 2 To x
            If sh.Range("b" & j).Value = arr(i) Then
                sh.Rows(j).Copy sh1.Range("a" & m)
                m = m + 1
            End If
        Next j
        m = 2: n = n + 1
    Next sh
    bo1.SaveAs ThisWorkbook.Path & "\" & arr(i) & ".xls"
    bo1.Close True: n = 1
Next i
Application.ScreenUpdating = True
End Sub

leng的思路特别好,我看了半天才弄明白。

因为刚开始学习VBA,许多语法都不熟。

第一,上面的程序段中最后由一个close true,这个方法没有在帮助上查到,只查到了close

第二,完全看不明白leng在sheet2中的程序了,估计应该是按照同样的规则向sheet1生成的books中添加数据的意思。

第三,yijiboo提出的去掉工作单位一列和添加汇总的程序,应该是添加在sheet1中就足够了吧

close true是关闭这个工作簿,并进行保存。

TA的精华主题

TA的得分主题

发表于 2009-9-21 19:44 | 显示全部楼层
佩服啊!
能否弄个反向的:就是把文件夹内的文件(比如这个代码生成的文件)中的数据合并到一个工作表……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 18:07 , Processed in 0.043551 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表