ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 不同文件下同名工作簿、同名工作表、相同区域汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-3 16:11 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
求助

在多个文件夹下,都存在同名工作簿——MSRep.xls,在工作簿中均存在一个同名的工作表——QRes。QRes工作表中的,B列、E列的第7行到第11行。如下图中所示,需要汇总到一个指定的工作簿——《GCMS检测结果.xlsm》的工作表《检测结果汇总》中。
QRes.JPG

检测结果汇总.rar (1013.16 KB, 下载次数: 11)

TA的精华主题

TA的得分主题

发表于 2019-11-3 16:41 来自手机 | 显示全部楼层
数据规范用ADO ,否则用数组法

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-3 16:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
EXCELLMY 发表于 2019-11-3 16:41
数据规范用ADO ,否则用数组法

我原本自己用pyhon东西拼凑了一段代码,可以有效运行。但是实验室的联机电脑不允许上网,每次都要把数据导来导去的,也嫌麻烦。

以前的汇总都是在同一个文件夹下,在论坛里可以找到直接能用的。简单的VBA代码,我可以理解,ADO、数组之类的我还看不懂。最近在论坛里查了好些个代码,因为不懂ADO,所以没有办法自己进行调整。
import os
import numpy as np
import pandas as pd

# ————————查找目标文件
list_path = []
path = (r'C:\Users\Administrator\Desktop\20190911')
for dirpath,dirnames,filenames in os.walk(path):
    for filename in filenames:
        a = os.path.join(dirpath,filename)
        list_path.append(a)
# print (list_path)

newlist=[]
for i in list_path:
    if "MSR" in i:
        newlist.append(i)
# print (newlist)

# ————————编制序列
x=int(len(newlist))

mainx=np.arange(1,x/2+1,1).repeat(10)
mainx=mainx.reshape([len(mainx),1])
mainx=mainx.tolist()

subx=np.arange(1,3,1).repeat(5)
subx=np.tile(subx,int(x/2))
subx=subx.reshape([len(mainx),1])
subx=subx.tolist()


# ————————提取数据,与序列组合
li = []
for i in newlist:
    li.append(pd.read_excel(i, sheet_name="QRes", skiprows=5))
data = pd.concat(li)
data=data.iloc[:,[1,4]]
data['主序列']=mainx
data['次序列']=subx


writer = pd.ExcelWriter(r'C:\Users\Administrator\Desktop\检测结果.xlsx')
data = data.to_excel(writer, 'Sheet1', index=False)
writer.save()


TA的精华主题

TA的得分主题

发表于 2019-11-3 17:20 | 显示全部楼层
Option Explicit
Sub test()  '既然都有,就不作判断
Dim Cn As Object, Sq$, fd
Sheets("检测结果汇总").Activate
Range("A2:b" & Rows.Count).ClearContents
Application.ScreenUpdating = False
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
For Each fd In CreateObject("Scripting.FileSystemObject").GetFolder(ThisWorkbook.Path & "\20190911").SubFolders
    Sq = "SELECT 化合物名称,样品量 FROM [Excel 12.0;Database=" & fd.Path & "\MSRep.xls" & "].[QRes$b6:e11]"
    Cells(Rows.Count, 1).End(xlUp).Offset(1).CopyFromRecordset Cn.Execute(Sq)
Next
Cn.Close
Set Cn = Nothing
Application.ScreenUpdating = True
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-3 17:22 | 显示全部楼层
………………

检测结果汇总.rar

1019.57 KB, 下载次数: 26

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-3 18:04 | 显示全部楼层

以前用SQL只知道能在一个工作簿的几个工作表间互相查询,原来还能这么使用,受教。

能否再请推荐一本与VBA相关的SQL的学习书籍。

TA的精华主题

TA的得分主题

发表于 2019-11-3 18:36 | 显示全部楼层
Dim conn
Sub cs()
  Application.ScreenUpdating = False
  Set conn = CreateObject("ADODB.Connection")
  Sheets("检测结果汇总").Activate
  Range("a2:b65536").ClearContents
  Getfd (ThisWorkbook.Path & "\20190911\")
  Application.ScreenUpdating = True
End Sub
Sub Getfd(ByVal pth)
     Set Fso = CreateObject("scripting.filesystemobject")
     Set ff = Fso.getfolder(pth)
     If ff.Files.Count > 0 Then
       For Each wj In ff.Files
         conn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;HDR=no';data source=" & wj
         Range("a" & Cells(Rows.Count, 1).End(3).Row + 1).CopyFromRecordset _
           conn.Execute("select F1,F4 from [QRes$b7:e11]")
         If conn.State = 1 Then conn.Close
       Next wj
     End If
     If ff.subfolders.Count > 0 Then
       For Each fd In ff.subfolders
         Getfd (fd)
       Next fd
       Set conn = Nothing
     End If
End Sub

TA的精华主题

TA的得分主题

发表于 2019-11-3 18:39 | 显示全部楼层
把程序文件一并发给你。

ls.zip

1.04 MB, 下载次数: 25

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-3 19:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 southmaple 于 2019-11-3 19:22 编辑
liangmutou01 发表于 2019-11-3 18:39
把程序文件一并发给你。

为了方便上传文件,我的每个子文件中只包含中了一个MSRep.xls文件,实际的情况下每个文件夹下都有多个同名的多个文件。
4楼的SQL代码中, Sq = "SELECT 化合物名称,样品量 FROM [Excel 12.0;Database=" & fd.Path & "\MSRep.xls" & "].[QRes$b6:e11]"

即便每个子文件夹下的文件较多,依然可以筛选出我需要的文件并进行汇总。

conn.Execute("select F1,F4 from [QRes$b7:e11]")——是否可以再完善一下。
子文件夹下.JPG


TA的精华主题

TA的得分主题

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

留下记号,学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-26 05:21 , Processed in 0.050655 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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