ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 放眼TOT

[求助] 如何用EXCEL批量处理TXT并将结果自动录入EXCEL

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-12-19 23:19 | 显示全部楼层
放眼TOT 发表于 2012-12-19 23:01
sp2 = sp2 + Abs(Val(brr(6)) - (Val(brr(24)) + Val(brr(25))) / 2) / Val(brr(6))
我改了一下您的这段 ...

单元格地址是从1开始,而数组下标从0开始,所以那些数字没错

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-19 23:32 | 显示全部楼层
yangyangzhifeng 发表于 2012-12-19 23:18
程序是照你的要求设计的,检查一下是不是你的文本文件数据本来就有差错,也没有表头都不知道这些数据是什 ...

就是计算的股票买卖价格的两个利差。Spread1就是第43列的平均值。Spread2是求2*绝对值(P2-P1)/P2得出的数据的平均值,其中P2是第7列的值,而P1=(P3+P4)/2,P3是第25列而P4是第26列。我检查了数据,没有错诶。

呜呜 都运行成功了,,,不懂为啥就是得出的结果差一点点啊。。 麻烦您对照一下我录制宏的那个代码看看? 我录制宏的代码在1楼附件里有。  

TA的精华主题

TA的得分主题

发表于 2012-12-20 08:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
放眼TOT 发表于 2012-12-19 23:32
就是计算的股票买卖价格的两个利差。Spread1就是第43列的平均值。Spread2是求2*绝对值(P2-P1)/P2得出的 ...

你的原始数值有的为空,你录的宏计算Spread2总是等于0,程序修改如下
  1. Sub test()
  2.     Dim Arr, k&, ph$, fl$, sp1#, sp2#, brr, i&, x&, l&
  3.     Dim crr(), n&
  4.     ph = ThisWorkbook.Path & ""
  5.     fl = Dir(ph & "*.txt")
  6.     Do While fl <> ""
  7.         Open ph & fl For Input As #1
  8.         Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.         Reset
  10.         k = UBound(Arr) + 1: x = UBound(Arr): l = k
  11.         sp1 = 0: sp2 = 0
  12.         For i = 0 To x
  13.             If Arr(i) <> "" Then
  14.                 brr = Split(Arr(i), ",")
  15.                 If brr(42) <> "" Then sp1 = sp1 + Val(brr(42)) Else k = k - 1
  16.               If Val(brr(6)) <> 0 Then sp2 = sp2 + Abs(Val(brr(6)) - (Val(brr(24)) + Val(brr(25))) / 2) / Val(brr(6)) Else l = l - 1
  17.             Else
  18.                 k = k - 1
  19.             End If
  20.         Next
  21.         sp1 = sp1 / k: sp2 = sp2 / l
  22.         n = n + 1
  23.         ReDim Preserve crr(1 To 3, 1 To n)
  24.         crr(1, n) = brr(0)
  25.         crr(2, n) = sp1
  26.         crr(3, n) = sp2
  27.         fl = Dir
  28.     Loop
  29.     Sheet2.Range("a2:c" & Rows.Count).ClearContents
  30.     Sheet2.Range("a2").Resize(n, 3) = Application.Transpose(crr)
  31. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-20 12:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yangyangzhifeng 发表于 2012-12-20 08:16
你的原始数值有的为空,你录的宏计算Spread2总是等于0,程序修改如下

求出的spread1对了! 激动!!
但是Spread2值还是跟之前您未修改前的代码得到的结果一样的,
我自己在我这运行我录制的宏能得出结果诶。。
因为计算spread2所用到的第7列(G列)的数据有些为0,所以用公式2*ABS(G1-(Y1+Z1)/2)/G1求出的值有些是#DIV/0!  ,这些值也是要和空值一样排除的,是不是这个原因所以不正确呢。您再修改试试好么,非常感谢您的耐心,不嫌弃我麻烦TAT,谢谢谢谢!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-20 12:59 | 显示全部楼层
我刚刚从1楼下了我上传的那个数据,先打开那个TXT文件为EXCEL,再运行我录制的那个代码,可以得到结果啊,怎么会到您那儿就成了0呢。。。奇怪。。那您就按我在22楼解释的数据的计算过程来吧,,,谢谢!!。。

TA的精华主题

TA的得分主题

发表于 2012-12-20 14:38 | 显示全部楼层
放眼TOT 发表于 2012-12-20 12:59
我刚刚从1楼下了我上传的那个数据,先打开那个TXT文件为EXCEL,再运行我录制的那个代码,可以得到结果啊,怎 ...

再看看
  1. Sub test()
  2.     Dim Arr, k&, ph$, fl$, sp1#, sp2#, brr, i&, x&, l&
  3.     Dim crr(), n&
  4.     ph = ThisWorkbook.Path & ""
  5.     fl = Dir(ph & "*.txt")
  6.     Do While fl <> ""
  7.         Open ph & fl For Input As #1
  8.         Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.         Reset
  10.         k = UBound(Arr) + 1: x = UBound(Arr): l = k
  11.         sp1 = 0: sp2 = 0
  12.         For i = 0 To x
  13.             If Arr(i) <> "" Then
  14.                 brr = Split(Arr(i), ",")
  15.                 If brr(42) <> "" Then sp1 = sp1 + Val(brr(42)) Else k = k - 1
  16.               If Val(brr(6)) <> 0 Then sp2 = sp2 + Abs(Val(brr(6)) - (Val(brr(24)) + Val(brr(25))) / 2) / Val(brr(6)) Else l = l - 1
  17.             Else
  18.                 k = k - 1: l = l - 1
  19.             End If
  20.         Next
  21.         sp1 = sp1 / k: sp2 = sp2 / l
  22.         n = n + 1
  23.         ReDim Preserve crr(1 To 3, 1 To n)
  24.         crr(1, n) = brr(0)
  25.         crr(2, n) = sp1
  26.         crr(3, n) = sp2
  27.         fl = Dir
  28.     Loop
  29.     Sheet2.Range("a2:c" & Rows.Count).ClearContents
  30.     Sheet2.Range("a2").Resize(n, 3) = Application.Transpose(crr)
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-20 14:58 | 显示全部楼层
yangyangzhifeng 发表于 2012-12-20 14:38
再看看

Spread2还是不对,跟您前面给的代码得出的结果一样。。。。

TA的精华主题

TA的得分主题

发表于 2012-12-20 15:09 | 显示全部楼层
放眼TOT 发表于 2012-12-20 14:58
Spread2还是不对,跟您前面给的代码得出的结果一样。。。。

这下应该可以了
  1. Sub test()
  2.     Dim Arr, k&, ph$, fl$, sp1#, sp2#, brr, i&, x&, l&
  3.     Dim crr(), n&
  4.     ph = ThisWorkbook.Path & ""
  5.     fl = Dir(ph & "*.txt")
  6.     Do While fl <> ""
  7.         Open ph & fl For Input As #1
  8.         Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  9.         Reset
  10.         k = UBound(Arr) + 1: x = UBound(Arr): l = k
  11.         sp1 = 0: sp2 = 0
  12.         For i = 0 To x
  13.             If Arr(i) <> "" Then
  14.                 brr = Split(Arr(i), ",")
  15.                 If brr(42) <> "" Then sp1 = sp1 + Val(brr(42)) Else k = k - 1
  16.               If Val(brr(6)) <> 0 Then sp2 = sp2 + 2 * Abs(Val(brr(6)) - (Val(brr(24)) + Val(brr(25))) / 2) / Val(brr(6)) Else l = l - 1
  17.             Else
  18.                 k = k - 1: l = l - 1
  19.             End If
  20.         Next
  21.         sp1 = sp1 / k: sp2 = sp2 / l
  22.         n = n + 1
  23.         ReDim Preserve crr(1 To 3, 1 To n)
  24.         crr(1, n) = brr(0)
  25.         crr(2, n) = sp1
  26.         crr(3, n) = sp2
  27.         fl = Dir
  28.     Loop
  29.     Sheet2.Range("a2:c" & Rows.Count).ClearContents
  30.     Sheet2.Range("a2").Resize(n, 3) = Application.Transpose(crr)
  31. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-12-20 15:21 | 显示全部楼层
yangyangzhifeng 发表于 2012-12-20 15:09
这下应该可以了

对啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!哇!!!太厉害啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!太感谢啦!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2012-12-23 08:32 | 显示全部楼层
yangyangzhifeng 乐于助人不厌其烦的精神让我感动!!尽管对于vba一窍不通
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 03:40 , Processed in 0.042280 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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