Excel精英培训网

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

[已解决]如何提取2016的数据,谢谢huang1314wei老师!

[复制链接]
发表于 2016-5-18 07:33 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2016-5-19 09:27 编辑

老师

我想利用字典实现提取2016年的不重复数据,但没有成功,请帮我看看,我错在哪里了,谢谢了
上传的附件中,有写好的语句。
提取2016.rar (37.76 KB, 下载次数: 7)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-5-18 07:59 | 显示全部楼层
没有细看,看一下是不是这个意思

Sub 交割()
    Dim Myr%, x, k
    Dim arr, ayy()
Application.ScreenUpdating = False

'一、。
    Set d = CreateObject("scripting.dictionary")
    With Sheet14
         Myr = .Range("C65536").End(xlUp).Row
         arr = .Range("A2:L" & Myr)
    End With
    ReDim ayy(1 To UBound(arr), 0 To 5)
        
    For x = 1 To UBound(arr)
      If arr(x, 1) = "2016" Then
        If Not d.exists(arr(x, 3) * 1) Then '提取不重复股票代码
           k = k + 1
           ayy(k, 0) = arr(x, 3)            '股票代码
           ayy(k, 1) = arr(x, 4)            '股票名称
           d.Add arr(x, 3) * 1, k           '将股票代码纳入字典管理
        Else
      
        
        ayy(d(arr(x, 3) * 1), 2) = ayy(d(arr(x, 3) * 1), 2) + arr(x, 7)     '股数
        ayy(d(arr(x, 3) * 1), 3) = ayy(d(arr(x, 3) * 1), 3) + arr(x, 12)    '发生金额,含税费
        ayy(d(arr(x, 3) * 1), 4) = ayy(d(arr(x, 3) * 1), 4) + 1             '交易次数
        End If
       End If
    Next x
   
    With Sheet15 '结果表
        .[s:w].Clear 'Contents
        .Columns("s:s").NumberFormatLocal = "000000"
        .Range("s2").Resize(k, UBound(ayy, 2)) = ayy
    End With

    Myr = 0
    Erase arr: Erase ayy
    x = 0: k = 0
    d.RemoveAll
Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

 楼主| 发表于 2016-5-18 21:18 | 显示全部楼层
huang1314wei 发表于 2016-5-18 07:59
没有细看,看一下是不是这个意思

Sub 交割()



谢谢老师的回复

但是,与正确的答案有出入,明细如下:
快照3.png
回复

使用道具 举报

发表于 2016-5-18 21:21 | 显示全部楼层
lhj323323 发表于 2016-5-18 21:18
谢谢老师的回复

但是,与正确的答案有出入,明细如下:

你把你的要求说一下,重新设计代码比较好
回复

使用道具 举报

 楼主| 发表于 2016-5-18 22:00 | 显示全部楼层
huang1314wei 发表于 2016-5-18 21:21
你把你的要求说一下,重新设计代码比较好

谢谢老师

就是按股票代码提取不重复值,这些数据的时间归属是2016年的。
回复

使用道具 举报

发表于 2016-5-18 22:26 | 显示全部楼层    本楼为最佳答案   
lhj323323 发表于 2016-5-18 22:00
谢谢老师

就是按股票代码提取不重复值,这些数据的时间归属是2016年的。

仔细看了一下,原来在加入字典的时候,前期的原值没有赋值给数组,所以导致有的数据没有汇总,在上面的代码添加三行代码即可
  1. Sub 交割()
  2.     Dim Myr%, x, k
  3.     Dim arr, ayy()
  4. Application.ScreenUpdating = False

  5.     Set d = CreateObject("scripting.dictionary")
  6.     With Sheet14
  7.          Myr = .Range("C65536").End(xlUp).Row
  8.          arr = .Range("A2:L" & Myr)
  9.     End With
  10.     ReDim ayy(1 To UBound(arr), 0 To 5)
  11.         
  12.     For x = 1 To UBound(arr)
  13.       If arr(x, 1) = 2016 Then
  14.         If Not d.exists(arr(x, 3) * 1) Then '提取不重复股票代码
  15.            k = k + 1
  16.            ayy(k, 0) = arr(x, 3)            '股票代码
  17.            ayy(k, 1) = arr(x, 4)            '股票名称
  18.            ayy(k, 2) = arr(x, 7)
  19.            ayy(k, 3) = arr(x, 12)
  20.            ayy(k, 4) = 1
  21.            d.Add arr(x, 3) * 1, k            '将股票代码纳入字典管理
  22.         Else
  23.            ayy(d(arr(x, 3) * 1), 2) = ayy(d(arr(x, 3) * 1), 2) + arr(x, 7)     '股数
  24.            ayy(d(arr(x, 3) * 1), 3) = ayy(d(arr(x, 3) * 1), 3) + arr(x, 12)    '发生金额,含税费
  25.            ayy(d(arr(x, 3) * 1), 4) = ayy(d(arr(x, 3) * 1), 4) + 1             '交易次数
  26.         End If
  27.      End If
  28.         
  29.     Next x
  30.    
  31.     With Sheet15 '结果表
  32.         .[s:w].Clear 'Contents
  33.         .Columns("s:s").NumberFormatLocal = "000000"
  34.         .Range("s2").Resize(k, UBound(ayy, 2)) = ayy
  35.     End With

  36.     Myr = 0
  37.     Erase arr: Erase ayy
  38.     x = 0: k = 0
  39.     d.RemoveAll
  40. Application.ScreenUpdating = True
  41. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-5-19 09:26 | 显示全部楼层
huang1314wei 发表于 2016-5-18 22:26
仔细看了一下,原来在加入字典的时候,前期的原值没有赋值给数组,所以导致有的数据没有汇总,在上面的代 ...

测试对了,非常感谢huang1314wei老师!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 04:14 , Processed in 0.413019 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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