ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 导入通达信股票数据至内存数组中的方法和代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-1-10 10:44 | 显示全部楼层 |阅读模式
      感谢香川大师!lee1892大师!wcymiss大师!,您们的帮助让我受益无穷,我想有没有和我一样想自己计算股票数据的,我也出点微薄之力,把我导出的方式和代码与你共享。目的,导出每只股票的历史数据至内存数组里,供后期计算研判(导入内容:日期,开盘价,最高价,最低价,收盘价,成交量,成交额,mf里存放的是股票代码),从2005年1月4日至2016年1月8日,文本2809个,导入至arr里483万行7列,耗时18秒,呵呵,如果不定义变量类型,耗时22秒

Option Explicit

Sub aa()
Dim arr(1 To 5000000, 1 To 7), time
Dim mf As String, st As String, ar
Dim b%, y%, r&

time = Timer


mf = Dir("c:\Data\*.txt")

    If mf = "" Then Exit Sub
      Do Until mf = ""

        b = FreeFile
        Open "c:\Data\" & "\" & mf For Input As #b

            Do Until EOF(1)
                Line Input #b, st
                    If st <> "" And st <> "数据来源:通达信" Then
                        r = r + 1
                        ar = Split(st, vbTab)
                            For y = 0 To UBound(ar)
                                arr(r, y + 1) = ar(y)
                            Next
                    End If
            Loop

        Close #b
    mf = Dir()
Loop


Debug.Print Timer - time

End Sub




Snap1.jpg
Snap2.jpg
Snap4.jpg
Snap5.jpg
Snap6.jpg

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-10 10:48 | 显示全部楼层
以上使用的是通达信股票软件,任意版本都行,新下载的通达信软件,没有历史数据,要先下载盘后历史数据后,在导出即可

TA的精华主题

TA的得分主题

发表于 2016-1-10 13:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-1-10 21:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我是来讨说法的 发表于 2016-1-10 13:35
一句cmd命令的事,你非要二三十行代码...

请教大师,如何实现!?

TA的精华主题

TA的得分主题

发表于 2016-1-10 21:50 | 显示全部楼层
我的数据导出来了,可是往arr写的时候,excel自动退出,看来arr行数设置到500万不行,我的是excel2010,i7,8g内存

TA的精华主题

TA的得分主题

发表于 2016-1-10 22:45 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我也用通达信导过,不过我是导成excel文件,同是2800多个,然后计算公式的收益率。采用不打开工作簿读取数据的方法,也可以实现。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-10 23:22 | 显示全部楼层
本帖最后由 xuesheng1 于 2016-1-10 23:25 编辑
renahu 发表于 2016-1-10 21:50
我的数据导出来了,可是往arr写的时候,excel自动退出,看来arr行数设置到500万不行,我的是excel2010,i7 ...

可能的问题
1,你的计算机内存不足
2,你导出的数据起点日期是多少,如果从1991年起导出,肯定超出500万行,我是从2005年起导出的,483万行,做历史统计,我觉得从2005或2010年起就够了
我是excel2013,16G内存,我测试过,最大可以装入2800万行8列没有问题,但一个arr不要装满吧,还得给其他后续数组留点地方

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-10 23:29 | 显示全部楼层
ychack 发表于 2016-1-10 22:45
我也用通达信导过,不过我是导成excel文件,同是2800多个,然后计算公式的收益率。采用不打开工作簿读取数 ...

对的,我开始也是这样导出的,但后续如果统计众多,计算很慢,不如一次性装入内存,或许我没有想到更好的方法,或许你的方法更强大

TA的精华主题

TA的得分主题

发表于 2016-1-11 09:34 | 显示全部楼层
YZC51 发表于 2016-1-10 21:43
请教大师,如何实现!?

COPY *.txt 汇总.txt
之后把汇总文件在EXCEL中分列就完成了

用VBA代码的目的是化繁为简,既然有简单的方法那就没必要使用VBA

TA的精华主题

TA的得分主题

发表于 2016-1-11 09:36 | 显示全部楼层
renahu 发表于 2016-1-10 21:50
我的数据导出来了,可是往arr写的时候,excel自动退出,看来arr行数设置到500万不行,我的是excel2010,i7 ...

excel2007和2010最多有1048576行
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-2 04:39 , Processed in 0.051182 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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