ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 叠加汇总数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-6 11:14 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

汇总表.zip (660.55 KB, 下载次数: 10)
如附件,新增表格与原有统计过的表格放置在同一文件夹内提取汇总,数据过多容易造成提取过慢,如何实现汇总时保留原先已有的数据只对新增的表格进行数据提取。还请大神指点!

TA的精华主题

TA的得分主题

发表于 2019-9-6 12:29 | 显示全部楼层
在原代码上改的。
Public Sub hebing()
   Application.ScreenUpdating = False
   Application.DisplayAlerts = False
   Dim wb As Workbook  '定义工作簿变量
   Dim sht As Worksheet  '定义工作表变量
   mypath = ThisWorkbook.Path & "\"  '获取当前程序运行的目录
   TMPNAME = Dir(mypath & "*.xlsx")  '获取工作簿名称
   Set D = CreateObject("scripting.dictionary")
   
   R = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row  '获取当前工作表的最大行号
   ARR = Sheet1.Range("B2:B" & R)
   For I = 1 To UBound(ARR)
   D(ARR(I, 1)) = ""
   Next
   
   Do While TMPNAME <> ""  '循环判断  工作簿名称不为空,就进行提取数据
   If Not D.EXISTS(Left(TMPNAME, 10)) Then
     If TMPNAME <> ThisWorkbook.Name Then   '判断工作簿名称不等于当前程序工作簿名称
     
        Set wb = Workbooks.Open(mypath & TMPNAME, 0, 1)  '打开工作簿,赋值给变量  wb
        
        Set sht = wb.Sheets(1)  ' 赋值打开工作簿的第一个工作表给变量 sht
        
        R = sht.Cells(Rows.Count, "b").End(xlUp).Row  '获取打开的工作簿,最大行号
        
        sjrr = sht.Range("a1:e" & R)  '获取已打开工作簿的数据到  数组  sjrr
        
        jifang = Mid(TMPNAME, 1, 10) '打开工作表的 a1 单元格值 机房位置 jifang
        
        rq = Mid(jifang, 1, 4) & "/" & Mid(jifang, 5, 2) & "/" & Mid(jifang, 7, 2)  '根据a1 单元格的值 生成日期
        
        
        For I = 1 To UBound(sjrr)  '表中的数据
        
            If sjrr(I, 1) <> "" Then  '判断a列的 值不为空,就把a列的值 也就是机房编号给变量 jfbh
                   jfbh = sjrr(I, 1)
            End If
               
            If sjrr(I, 2) <> "" Then  '判断第二列值不为空  就开始累加输出信息到工作表
            
                mr = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row + 1  '获取汇总工作表的最后行号  给变量mr
                With Sheet1
                     .Cells(mr, "a") = rq            '输出日期
                     .Cells(mr, "b") = jifang        '机房巡检次数
                     .Cells(mr, "c") = jfbh          '机房编号
                     .Cells(mr, "d") = sjrr(I, 2)    '机柜位置
                     .Cells(mr, "e") = getwd(sjrr(I, 3)) '左边温度  getwd 是一个自定义函数 传入原始数据,自动清除温度符号和获取最大值
                     .Cells(mr, "f") = getwd(sjrr(I, 4)) '中间温度
                     .Cells(mr, "g") = getwd(sjrr(I, 5)) '右边温度
                     If .Cells(mr, "e") <> 0 Or .Cells(mr, "f") <> 0 Or .Cells(mr, "g") <> 0 Then
                     .Cells(mr, "H") = Application.Average(.Cells(mr, "e"), .Cells(mr, "f"), .Cells(mr, "g"))
                     End If
                End With
           End If
           VBA.DoEvents  '释放系统控制权,防止程序假死
        Next
        wb.Close  '关闭已打开的工作簿
     End If
     End If
     TMPNAME = Dir()  '获取下一个文件的工作簿名称
   Loop
   
     
   MsgBox "ok"  '处理完成,消息提示框
   Application.ScreenUpdating = True
   Application.DisplayAlerts = True
   
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 14:11 , Processed in 0.031282 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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