Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: jessylake

[已解决]期望高手解决一个从外部文件中将数据整合到excel表中,然后分类计算提取

[复制链接]
 楼主| 发表于 2015-3-28 16:31 | 显示全部楼层
jessylake 发表于 2015-3-28 16:07
其实,您已经把表1调整好了,只要按时间顺序把需要的数据提出来放进黄色区域就行,比如

融资买入: 从 ...


所以表1不用整的太漂亮,反正最后一步是删除表1和表2,如果代码能精简更好
回复

使用道具 举报

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

新建文件夹.rar

14.33 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2015-3-28 17:29 | 显示全部楼层
dsmch 发表于 2015-3-28 17:22
…………

老师还有点问题,平均价格一定不要四舍五入,那个价格是:20.9982987630828,现在是20.998,还有每笔交易要按照先发生的在上面,后发生的在下面排列,现在反了
回复

使用道具 举报

 楼主| 发表于 2015-3-28 17:34 | 显示全部楼层
dsmch 发表于 2015-3-28 17:22
…………

再一个,成交数量为零的不要
回复

使用道具 举报

 楼主| 发表于 2015-3-28 17:44 | 显示全部楼层
本帖最后由 jessylake 于 2015-3-28 19:15 编辑
dsmch 发表于 2015-3-28 17:22
…………


我放入一个新数据,您看看执行后和实际录入效果的差异,融资买入怎么就一行数据?

可以了,改成ar就好了

含新数据.zip

31.15 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2015-3-28 18:27 | 显示全部楼层
本帖最后由 jessylake 于 2015-3-28 18:40 编辑
dsmch 发表于 2015-3-28 17:22
…………


把代码中的arr改成ar基本就好了,
t = t + 1
If t > 1 Then Exit Sub  这段是什么意思?

还有从上到下每笔按时间顺序,在代码中哪里体现?


再有,就是融资买入那栏,灰色区域里是有公式的,用n = Range("a65536").End(xlUp).Row + 2 还是不能把数据放到黄色区域

点评

代码只能运行一次,避免反复运行产生重复结果  发表于 2015-3-28 21:15
回复

使用道具 举报

 楼主| 发表于 2015-3-28 18:55 | 显示全部楼层
dsmch 发表于 2015-3-28 17:22
…………

老师您看看这个,灰色区域里面有公式,这个怎么放数据?
含新数据1.zip (34.05 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2015-3-28 21:13 | 显示全部楼层    本楼为最佳答案   
把公式删除,用代码产生结果
Dim t%
Sub Macro2()
t = t + 1
If t > 1 Then Exit Sub
Dim arr, brr, crr, ar, d, i&, j%, s&, s2&, n&
Set d = CreateObject("scripting.dictionary")
MyPath = ThisWorkbook.Path & "\"
Application.ScreenUpdating = False
Workbooks.OpenText MyPath & "数据文件1.txt"
With ActiveWorkbook
    arr = .Sheets(1).Range("A3").CurrentRegion
    .Close 0
End With
Workbooks.OpenText MyPath & "数据文件2.txt"
With ActiveWorkbook
    brr = .Sheets(1).Range("A3").CurrentRegion
    .Close 0
End With
ReDim ar(1 To UBound(arr), 1 To UBound(arr, 2))
ReDim crr(1 To UBound(brr), 1 To 2)
For i = 2 To UBound(brr)
    If Not d.exists(brr(i, 10)) Then
        s = s + 1
        d(brr(i, 10)) = s
        crr(s, 1) = brr(i, 8)
        crr(s, 2) = brr(i, 7)
    Else
        n = d(brr(i, 10))
        crr(n, 1) = crr(n, 1) + brr(i, 8)
        crr(n, 2) = crr(n, 2) + brr(i, 7)
    End If
Next
For i = 1 To UBound(arr)
    If arr(i, 9) <> 0 Then
        s2 = s2 + 1
        For j = 1 To UBound(arr, 2)
            ar(s2, j) = arr(i, j)
        Next
        If d.exists(ar(s2, 14)) Then
            n = d(ar(s2, 14))
            ar(s2, 8) = crr(n, 1) / crr(n, 2)
        End If
    End If
Next
For i = 2 To s2
    If ar(i, 4) = "买入" Then
        If ar(i, 12) Like "*融资" Then
            n = Range("a65536").End(xlUp).Row + 2
            Cells(n, 1) = ar(i, 8) * ar(i, 9)
            Cells(n, 2) = ar(i, 9)
            Cells(n - 1, 1) = Cells(n, 1) * 0.0004
        Else
            n = Range("c65536").End(xlUp).Row + 1
            Cells(n, 3) = ar(i, 9)
            Cells(n, 4) = ar(i, 8)
        End If
    Else
        n = Range("e65536").End(xlUp).Row + 1
        Cells(n, 5) = ar(i, 9)
        Cells(n, 6) = ar(i, 8)
    End If
Next
Application.ScreenUpdating = True
End Sub

评分

参与人数 1 +3 收起 理由
jessylake + 3 神马都是浮云

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-3-28 21:29 | 显示全部楼层
dsmch 发表于 2015-3-28 21:13
把公式删除,用代码产生结果
Dim t%
Sub Macro2()


老师这是一个用sql语句的版本,但是好像没有完全按时间顺序,特别是融资买入的部分,金额19125那笔应该在最下面的,您知道怎么用 order by让它按时间顺序排吗
文件数据1中N1单元格字段有空格造成的.rar (33.67 KB, 下载次数: 2)

点评

对这个不大熟悉,让高手帮你  发表于 2015-3-28 21:33
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 22:02 , Processed in 0.456498 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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