Excel精英培训网

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

[已解决]求助vba

[复制链接]
发表于 2013-4-15 21:51 | 显示全部楼层 |阅读模式
求数.rar (29.9 KB, 下载次数: 14)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-4-15 21:55 | 显示全部楼层
你这题哪来的啊,怎么老是有这种题型求助呢。
回复

使用道具 举报

 楼主| 发表于 2013-4-15 22:01 | 显示全部楼层
hwc2ycy 发表于 2013-4-15 21:55
你这题哪来的啊,怎么老是有这种题型求助呢。

因为觉得很新鲜呀,
回复

使用道具 举报

发表于 2013-4-15 22:04 | 显示全部楼层
lmknj 发表于 2013-4-15 22:01
因为觉得很新鲜呀,

我记得这题好像解了好多次了吧???

直接修改里面的数据就能处理了嘛,干嘛还重复发贴呢?
回复

使用道具 举报

 楼主| 发表于 2013-4-15 22:12 | 显示全部楼层
无聊的疯子 发表于 2013-4-15 22:04
我记得这题好像解了好多次了吧???

直接修改里面的数据就能处理了嘛,干嘛还重复发贴呢?

巳前的运行有点慢,我要重复几百次,要20个小时才能运行完,只有再问,
回复

使用道具 举报

发表于 2013-4-15 22:19 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim lCol&
  3.     Dim lRept&
  4.     Dim result, arr
  5.     Dim lLastRow&
  6.     Columns(1) = ""
  7.     lLastRow = 1
  8.     For lCol = 9 To 16
  9.         arr = Range(Cells(3, lCol), Cells(10000, lCol))
  10.         result = CheckRept(arr, Cells(1, lCol))
  11.         If IsArray(result) Then
  12.             Cells(lLastRow, 1).Resize(UBound(result)) = WorksheetFunction.Transpose(result)
  13.             lLastRow = lLastRow + UBound(result)
  14.         End If
  15.     Next
  16. End Sub

  17. Function CheckRept(arr, lCondition As Long)
  18.     If Not IsArray(arr) Then CheckRept = False: Exit Function
  19.     If lCondition <= 0 Then CheckRept = False: Exit Function
  20.     Dim lCount&
  21.     Dim result()

  22.     Dim dic As Object

  23.     Set dic = CreateObject("scripting.dictionary")
  24.     Dim i As Long
  25.     Dim keys
  26.     ReDim result(1 To 1)
  27.     For i = LBound(arr) To UBound(arr)
  28.         dic(arr(i, 1)) = dic(arr(i, 1)) + 1
  29.     Next
  30.     For Each keys In dic.keys
  31.         If dic(keys) = lCondition Then
  32.             lCount = lCount + 1
  33.             ReDim Preserve result(1 To lCount)
  34.             result(lCount) = "'" & keys
  35.         End If
  36.     Next
  37.     If lCount > 1 Then
  38.         CheckRept = result
  39.     Else
  40.         CheckRept = False
  41.     End If
  42. End Function
复制代码
回复

使用道具 举报

发表于 2013-4-15 22:19 | 显示全部楼层
你到底多少数据啊,要运行20几个小时。
回复

使用道具 举报

 楼主| 发表于 2013-4-15 22:35 | 显示全部楼层
hwc2ycy 发表于 2013-4-15 22:19
你到底多少数据啊,要运行20几个小时。

有100个薄,每个薄有400m,数据太多
回复

使用道具 举报

 楼主| 发表于 2013-4-15 22:41 | 显示全部楼层
hwc2ycy 发表于 2013-4-15 22:19

谢谢你这次非常快
回复

使用道具 举报

发表于 2013-4-15 22:57 | 显示全部楼层
lmknj 发表于 2013-4-15 22:35
有100个薄,每个薄有400m,数据太多

100个400M的Excel文件?!那不是40G!太吓人了!咱还没见过400M的Excel文件呢!4M的Excel文件咱都觉得大!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 12:09 , Processed in 0.338714 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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