Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2814|回复: 6

[已解决]请帮忙编一个股票高管持股变动的自定义数据的VBA代码

[复制链接]
发表于 2014-12-7 13:09 | 显示全部楼层 |阅读模式
本帖最后由 另类2011 于 2014-12-7 13:13 编辑

现有一组股市中的高管持股变动情况的数据:
代码
日期
变动股数
代码
日期
2014-12-5
-10.00万
2014-12-5
-100000
2014-12-4
-1.00万
2014-12-4
-360000
2014-12-4
-35.00万
2014-12-4
-360000
2014-12-4
-4791
2014-12-4
-4791
2014-12-4
-5000
2014-12-4
-5000
2014-12-4
-1.00万
2014-12-4
-10000
2014-12-4
-6000
2014-12-4
-56000
2014-12-4
-5.00万
2014-12-4
-56000
2014-12-4
-69.92万
2014-12-4
-699200
2014-12-4
-700万
2014-12-4
-7000000
2014-12-4
-150万
2014-12-4
-1500000
2014-12-3
-1.00万
2014-12-3
-15000
2014-12-3
-5000
2014-12-3
-15000
2014-12-3
-1.00万
2014-12-3
-10000
2014-12-3
-3000
2014-12-3
-3000
2014-12-3
-4.00万
2014-12-3
-40000


前面的是原始数据,后面的是完成后的数值,这里要求的是:
1,把带“万”的数据变成正常的数值,
2,把同一日期,并且同一代码的数值求和,比如第三、第四行的300334求和后的数值是360000,
3,把“6”字头的代码前面加上“SH”,其它代码恢复成六位数后前面再加"SZ",比如第五行的777变成了SZ000777,
这样的数据就可以编成自定义数据,导入大智慧软件调用了,由于天天都要更新,原来都是手工操作的感觉很繁琐,所以只有请老师们帮忙了,谢谢!!!!!!!!!
最佳答案
2014-12-7 14:44
  1. Sub 自定义格式()
  2.      Dim arr, re, d As Object, i&, dkey$
  3.      arr = Range("A3:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  4.      Set d = CreateObject("scripting.dictionary")
  5.      For i = 1 To UBound(arr)
  6.          dkey = IIf(Left(arr(i, 1), 1) = "6", "SH", "SZ") & Format(arr(i, 1), "000000") & "|" & arr(i, 2)
  7.          d(dkey) = d(dkey) + IIf(InStr(arr(i, 3), "万"), Replace(arr(i, 3), "万", "") * 10000, arr(i, 3))
  8.      Next
  9.      arr = d.keys
  10.      ReDim re(1 To d.Count, 1 To 3)
  11.      For i = 0 To UBound(arr)
  12.          re(i + 1, 1) = Split(arr(i), "|")(0)
  13.          re(i + 1, 2) = Split(arr(i), "|")(1)
  14.          re(i + 1, 3) = d(arr(i))
  15.      Next
  16.      Range("E3").Resize(UBound(re), UBound(re, 2)) = re
  17. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-12-7 14:44 | 显示全部楼层    本楼为最佳答案   
  1. Sub 自定义格式()
  2.      Dim arr, re, d As Object, i&, dkey$
  3.      arr = Range("A3:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  4.      Set d = CreateObject("scripting.dictionary")
  5.      For i = 1 To UBound(arr)
  6.          dkey = IIf(Left(arr(i, 1), 1) = "6", "SH", "SZ") & Format(arr(i, 1), "000000") & "|" & arr(i, 2)
  7.          d(dkey) = d(dkey) + IIf(InStr(arr(i, 3), "万"), Replace(arr(i, 3), "万", "") * 10000, arr(i, 3))
  8.      Next
  9.      arr = d.keys
  10.      ReDim re(1 To d.Count, 1 To 3)
  11.      For i = 0 To UBound(arr)
  12.          re(i + 1, 1) = Split(arr(i), "|")(0)
  13.          re(i + 1, 2) = Split(arr(i), "|")(1)
  14.          re(i + 1, 3) = d(arr(i))
  15.      Next
  16.      Range("E3").Resize(UBound(re), UBound(re, 2)) = re
  17. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
另类2011 + 3 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-7 15:19 | 显示全部楼层
xdragon 发表于 2014-12-7 14:44

谢谢xdragon 老师!辛苦了!好人一生平安!!!!!!!
回复

使用道具 举报

 楼主| 发表于 2014-12-7 16:40 | 显示全部楼层
xdragon 发表于 2014-12-7 14:44

看代码里好像没有限制具体行数,测试了变天到2399行时还可以,可是到2499行时就出问题了,不知道是什么原因,请老师有空看看,麻烦了!多谢!!!!!!
回复

使用道具 举报

 楼主| 发表于 2014-12-7 17:00 | 显示全部楼层
xdragon 发表于 2014-12-7 14:44

不好意思,查到问题了,在2440行上有个数据是1.35亿,麻烦老师在下面代码上加一个“亿”的换算,拜托!谢谢!!!!!!
d(dkey) = d(dkey) + IIf(InStr(arr(i, 3), "万"), Replace(arr(i, 3), "万", "") * 10000, arr(i, 3))


回复

使用道具 举报

发表于 2014-12-7 17:24 | 显示全部楼层
  1. Sub 自定义格式()
  2.      Dim arr, re, d As Object, i&, dkey$
  3.      arr = Range("A3:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  4.      Set d = CreateObject("scripting.dictionary")
  5.      For i = 1 To UBound(arr)
  6.          dkey = IIf(Left(arr(i, 1), 1) = "6", "SH", "SZ") & Format(arr(i, 1), "000000") & "|" & arr(i, 2)
  7.          d(dkey) = d(dkey) + GetPrice(arr(i, 3))
  8.      Next
  9.      arr = d.keys
  10.      ReDim re(1 To d.Count, 1 To 3)
  11.      For i = 0 To UBound(arr)
  12.          re(i + 1, 1) = Split(arr(i), "|")(0)
  13.          re(i + 1, 2) = Split(arr(i), "|")(1)
  14.          re(i + 1, 3) = d(arr(i))
  15.      Next
  16.      Range("E3").Resize(UBound(re), UBound(re, 2)) = re
  17. End Sub

  18. Function GetPrice#(NumString)
  19.      Select Case Right(NumString, 1)
  20.          Case "亿"
  21.              GetPrice = Replace(NumString, "亿", "") * 100000000
  22.          Case "万"
  23.              GetPrice = Replace(NumString, "万", "") * 10000
  24.          Case Else
  25.              GetPrice = Val(NumString)
  26.      End Select
  27. End Function
复制代码

评分

参与人数 1 +3 收起 理由
另类2011 + 3 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-12-7 18:41 | 显示全部楼层
xdragon 发表于 2014-12-7 17:24

ok了!谢谢xdragon老师!辛苦了!!!!!!!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-11 14:34 , Processed in 0.435082 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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