ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6139|回复: 14

[求助] [求助]请教 大家帮忙将多个工作表按要求合并为一个工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-12-11 09:43 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请大家帮我将多个工作表合并!
这样格式类似的工作表有上百个,这只是其中三个。其中黄色部分的表头和表尾在合并后的表中不要。
但是表的主体部分(两块黄色区域之间的白色区域)的行数并不是固定的。请大家百忙之中帮我解决! 76VVqTSl.rar (17.79 KB, 下载次数: 77)

TA的精华主题

TA的得分主题

发表于 2007-12-11 10:20 | 显示全部楼层

不好意思,这些工作我每天做,这段间较忙,不能直接帮你,把我做好的代码发给大家看吧,看懂之后这个问题就解决了,这段代码你应该能用,试试吧

Public Sub 加数据到缓存表(源数据文件名 As String)       '含扩展名,

dim 缓存表 as worksheet

set 缓存表=worksheets.add

缓存表.Cells.Clear
Set 源数据工作簿 = Workbooks.Open(ThisWorkbook.Path & "\" & 源数据文件名, ReadOnly:=True)
Dim 当前工作表 As Worksheet
Dim 数据区 As Range
Dim 缓存表数据行数 As Long
Dim 开始粘贴行 As Long
For Each 当前工作表 In 源数据工作簿.Worksheets
    Set 数据区 = 返回数据区(当前工作表)
    数据区.Columns(4).Value = 当前工作表.Name
    数据区.Copy
    缓存表数据行数 = 缓存表.Cells.CurrentRegion.Rows.Count
    If 缓存表数据行数 = 1 Then
        开始粘贴行 = 1
    Else
        开始粘贴行 = 缓存表数据行数 + 1
    End If
    缓存表.Cells(开始粘贴行, 1).PasteSpecial
Next
Application.CutCopyMode = False
源数据工作簿.Close False
End Sub
Private Function 分析表头位置(待分析表 As Worksheet,Optional 表头标志 as string ="38号") As Long        '分析标志为"38号"
Dim 当前行数据量 As Long
Dim ii As Long
For ii = 1 To 50
    当前行数据量 = WorksheetFunction.CountA(待分析表.Rows(ii))
    If 当前行数据量 > 8 Then
        Dim 可变化上限 As Long
        可变化上限 = 当前行数据量
        Dim jj As Long
        For jj = 1 To 可变化上限
            Select Case 待分析表.Cells(ii, jj)
                Case "":
                    可变化上限 = 可变化上限 + 1
                Case 表头标志:
                    分析表头位置 = ii
                    Exit Function
            End Select
        Next
    End If
Next
分析表头位置 = 1
End Function

Private Function 分析表尾位置(待分析表 As Worksheet,Optional 表尾标志 as string ="合计")     '分析标志为"合计"
待分析表.Cells.CurrentRegion.Replace " ", ""
待分析表.Cells.CurrentRegion.Replace " ", ""
Dim 表头位置  As Long
表头位置 = 分析表头位置(待分析表)

Dim 待分析表行数 As Long
待分析表行数 = 待分析表.Cells(表头位置 + 4, 1).End(xlDown).Row
Dim 待分析表列数 As Long
待分析表列数 = 待分析表.Cells(表头位置 + 4, 1).CurrentRegion.Columns.Count
Dim ii As Long
Dim jj As Long
For ii = 待分析表行数 To 1 Step -1
    For jj = 1 To 待分析表列数
        If 待分析表.Cells(ii, jj) = 表尾标志 Then
            分析表尾位置 = ii - 1
            Exit Function
        End If
    Next
Next
分析表尾位置 = 待分析表行数
End Function

Public Function 分析首行数据位置(待分析表 As Worksheet) As Long
    分析首行数据位置 = 分析表头位置(待分析表) + 2   '2为第一行数据和表头差的行数

End Function

Public Function 返回数据区(待分析表 As Worksheet, Optional 是否返回表头 As Boolean = False) As Range
Dim 开始行号 As Long
If 是否包含表头 Then
    开始行号 = 分析表头位置(待分析表)
Else
    开始行号 = 分析首行数据位置(待分析表)
End If
Dim 结束行号 As Long
    结束行号 = 分析表尾位置(待分析表)
Dim 数据列数 As Long
    数据列数 = 待分析表.Cells(分析首行数据位置(待分析表), 1).CurrentRegion.Columns.Count
   
Set 返回数据区 = Range(待分析表.Cells(开始行号, 1), 待分析表.Cells(结束行号, 数据列数))
End Function

TA的精华主题

TA的得分主题

发表于 2007-12-11 11:24 | 显示全部楼层

没人跟贴,我都没兴趣了!

做好了,在前面的代码上稍做了点改动,

使用方法:打开 合并工作表程序,运行里面的主程序宏.下班了,明天上午见!

yTqYRL1P.rar (38.53 KB, 下载次数: 246)
[此贴子已经被作者于2007-12-11 17:17:46编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-11 13:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

楼上的zhxi81,实在不好意思。

我的VBA的水平实在太菜,也就刚刚起步。

您给我的代码实在是太深奥了。希望您能详细解释,或者把您工作中的实例拿出来,谢谢了!

TA的精华主题

TA的得分主题

发表于 2007-12-13 17:12 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-14 10:44 | 显示全部楼层

不好意思,没有解决,麻烦您把示例文件给发上来.

[此贴子已经被作者于2007-12-14 11:00:11编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-14 11:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

已经解决!

结果和希望的效果一样!非常感谢1

只是不明白代码,希望您能解释一下。再次感谢

TA的精华主题

TA的得分主题

发表于 2007-12-14 13:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
定义了四个函数,每个独立完成一个任务,这四个函数协同工作就完成任务了
加数据到缓存表
分析表头位置
分析表尾位置
分析首行数据位置
这四个函数是我工作中积累起来的,非常方便,重用性都非常高,在不同的表里修改一下调用参数就基本能用了,由于时间及空间关系不能详细解释,请谅解

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-14 13:46 | 显示全部楼层

感谢zhxi81老师的帮助。

我会好好研究一下您的代码,有问题的我会向您请教。

TA的精华主题

TA的得分主题

发表于 2007-12-14 13:52 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-6-17 15:06 , Processed in 0.041047 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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