Excel精英培训网

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

[已解决]提取一个数组中的数据,重复的算一个,求最佳方法:

[复制链接]
发表于 2015-10-24 10:33 | 显示全部楼层 |阅读模式
sub im ()dim arr,brr()
arr=array(0,12,10,13,126,0,10,12,10,13)


      我想求出这个数组中出现的数字,重复的算一个!
      模拟结果:brr=0,12,10,13,126
      求问有什么写法,?
目前我用的方法是
for i = 0 to ubound(arr)
    for u = i+1 to ubound(arr)
       if arr(i)=arr(u) then
        brr(i)=arr(i)      
       endif
  next u
   next i
                       这种方法根本不好使,会出错,请问关于这个要求代码要怎么写好啊>真的很急,感谢大家给出意见!!
end sub
最佳答案
2015-10-24 10:44
chulia_wong 发表于 2015-10-24 10:42
目前还不会字典,求写法
  1. Sub im()
  2.     Dim arr, d
  3.     arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     For i = 0 To UBound(arr)
  6.         d(arr(i)) = ""
  7.     Next i
  8.     Range("a1").Resize(d.Count) = Application.Transpose(d.keys)
  9. End Sub
复制代码
这样
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-10-24 10:38 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2015-10-24 10:42 | 显示全部楼层
qh8600 发表于 2015-10-24 10:38
用字典

目前还不会字典,求写法
回复

使用道具 举报

发表于 2015-10-24 10:44 | 显示全部楼层    本楼为最佳答案   
chulia_wong 发表于 2015-10-24 10:42
目前还不会字典,求写法
  1. Sub im()
  2.     Dim arr, d
  3.     arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     For i = 0 To UBound(arr)
  6.         d(arr(i)) = ""
  7.     Next i
  8.     Range("a1").Resize(d.Count) = Application.Transpose(d.keys)
  9. End Sub
复制代码
这样

评分

参与人数 1 +1 收起 理由
chulia_wong + 1 感谢帮助

查看全部评分

回复

使用道具 举报

发表于 2015-10-24 10:45 | 显示全部楼层
arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
set d = createobject("scripting.dictionary")
for x = 0 To ubound(arr)
    d(arr(x)) = 1
Next
brr = d.keys
回复

使用道具 举报

 楼主| 发表于 2015-10-24 10:52 | 显示全部楼层
本帖最后由 chulia_wong 于 2015-10-24 10:53 编辑
橘子红 发表于 2015-10-24 10:45
arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
set d = createobject("scripting.dictionary")
fo ...

d(arr(x)) = 1
请问这一句是什么意思啊,为什么可以等于空,也可以等于1,结果都对?谢谢!
回复

使用道具 举报

 楼主| 发表于 2015-10-24 10:53 | 显示全部楼层
橘子红 发表于 2015-10-24 10:45
arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
set d = createobject("scripting.dictionary")
fo ...

d(arr(x)) = 1
请问这一句是什么意思啊,为什么可以等于空,也可以等于1,结果都对?谢谢!

点评

因为 d()=1或者空 是字典的item属性,这里只用到key属性,所以item随便写什么都行  发表于 2015-10-24 10:56
回复

使用道具 举报

 楼主| 发表于 2015-10-24 11:11 | 显示全部楼层
本帖最后由 chulia_wong 于 2015-10-24 11:12 编辑
qh8600 发表于 2015-10-24 10:44
这样

再麻烦一下下,请问我想把最后筛选出来 的值用","号隔开的形式表达出来,该怎么利用字典里的什么属性
Dim i As Byte
    arr = Array(0, 12, 10, 13, 126, 0, 10, 12, 10, 13)
    Set dic = CreateObject("scripting.dictionary")
    For i = 0 To UBound(arr)
        dic(arr(i)) = ""
    Next i
    最后结果以:brr = 0,12,10,13,126 (值中间用逗号隔开)这种字符串表达出来,而不是:brr = (0,12,10,13,126)这种数组表达出来!

回复

使用道具 举报

发表于 2015-10-24 11:18 | 显示全部楼层
chulia_wong 发表于 2015-10-24 11:11
再麻烦一下下,请问我想把最后筛选出来 的值用","号隔开的形式表达出来,该怎么利用字典里的什么属性
Dim  ...

brr = Join(d.keys, ",")
回复

使用道具 举报

 楼主| 发表于 2015-10-24 11:50 | 显示全部楼层
qh8600 发表于 2015-10-24 11:18
brr = Join(d.keys, ",")

太感谢了!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 09:47 , Processed in 0.900295 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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