ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何将品种工作簿名称及对应的工作表的E列数据写入数组

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-10-9 18:03 | 显示全部楼层 |阅读模式
将品种工作簿名称及对应的工作表的E列数据写入数组

求助.zip

81.02 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2016-10-9 21:25 | 显示全部楼层
没看懂你的要求。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-9 22:05 来自手机 | 显示全部楼层
chxw68 发表于 2016-10-9 21:25
没看懂你的要求。

把工作簿名称写入数组,把工作表sheet1中E列数据写入数组,没成功。怎么解决?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-10 10:37 | 显示全部楼层
“品种日周期”文件夹里有上千种名字不同的excel文件*.csv,“品种日周期”文件夹外有一个文件名为《相关性分析结果》的excel启用宏的工作簿。
    需要在excel的工作簿《相关性分析结果》里的sheet1工作表的A列、B列、C列分别写入配对的品种名称(A列里、B列里写)、相关性系数计算结果(C列里写)。
    具体算法:对“品种日周期”文件夹里的上千个不同品种的*.csv文件里的E列数据、每两个进行配对组合排列,并用函数CORREL计算其相关系数。配对与计算后,将配对名分别写入A列、B列,将计算出的相关系数结果写入C列。
     对于每个excel文件里E列数据,CORREL函数里的两个参数取值办法是:例如在本求助中只有三个品种的*.csv文件的情况下,需要PP指数与PTA指数配对计算、PP指数与白糖指数配对计算、PTA指数与白糖指数配对计算每个配对品种之间的相关系数。
    PP指数E列有637行(个)数据、PTA指数E列有2382行(个)数据、白糖指数E列有2613行(个)数据。
PP指数与PTA指数配对计算值 =  =CORREL(PP指数.csv!$E$1:$E$637,PTA指数.csv!$E$1746:$E$2382)       注:1746 = 2382 - 637 + 1
   
PP指数与白糖指数配对计算值  =CORREL(PP指数.csv!$E$1:$E$637,白糖指数.csv!$E$1977:$E$2613)        注:1977 =2613 - 637 + 1
   
PTA指数与白糖指数配对计算 =CORREL(PTA指数.csv!$E$1:$E$2382,白糖指数.csv!$E$232:$E$2613)        注:232 =2613 - 2382 + 1
     
    也就是说:每两个配对品种的E列数据的截取数以最短的数为基准,对于最短的取全部的E列数据,对于最长的取最长的E列里倒数的与最短数据量相等的数据。

求助.zip

195.47 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2016-10-10 10:49 | 显示全部楼层
可设一个辅助表,用sql将文件数据读入数据表各列中,列头以文件名命名,之后不过是截取数组问题。为什么要用sql?l因为用它可以在不打开文件的情况下取数,否则几百个文件打开、关闭就卡死你。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-10-10 11:13 | 显示全部楼层
wzsy2_mrf 发表于 2016-10-10 10:49
可设一个辅助表,用sql将文件数据读入数据表各列中,列头以文件名命名,之后不过是截取数组问题。为什么要 ...

老师讲的道理我懂了,但我不会SQL啊

TA的精华主题

TA的得分主题

发表于 2016-10-10 11:36 | 显示全部楼层
  1. Sub aa()
  2.     Dim cnn As Object, pPath$, temp$, myPath$, j&, shtName$, sql$
  3.     pPath = ThisWorkbook.Path & "\品种日周期"
  4.     Set cnn = CreateObject("ADODB.Connection")
  5.     With cnn
  6.         If Application.Version = "11.0" Then
  7.             .Provider = "microsoft.jet.oledb.4.0"
  8.             .ConnectionString = "extended properties=""excel 8.0;HDR=yes;"";data source=" & ThisWorkbook.FullName
  9.         Else
  10.             .Provider = "microsoft.ACE.oledb.12.0"
  11.             .ConnectionString = "extended properties=""excel 12.0;HDR=yes;"";data source=" & ThisWorkbook.FullName
  12.         End If
  13.         .Open
  14.     End With
  15.    
  16.     myPath = pPath
  17.     temp = Dir(myPath & "*.xls")
  18.    
  19.     Do While temp <> ""
  20.         If InStr(temp, "指数") > 0 Then
  21.             shtName = Split(temp, ".")(0)
  22.             sql = "select * from [Excel 12.0;hdr=no;Database=" & myPath & temp & ";].[" & shtName & "$E:E]"
  23.             j = j + 1
  24.             Sheet2.Cells(1, j).Value = shtName
  25.             Sheet2.Cells(2, j).CopyFromRecordset cnn.Execute(sql)
  26.         End If
  27.         temp = Dir
  28.     Loop
  29.     Set cnn = Nothing
  30. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2016-10-10 11:37 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 07:12 , Processed in 0.043905 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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