Excel精英培训网

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

[已解决]vba怎么实现把某一列不重复的内容依次排列在另外一列?

[复制链接]
发表于 2012-3-6 17:18 | 显示全部楼层 |阅读模式
本帖最后由 ampa 于 2012-3-6 17:34 编辑

vba怎么实现把某一列不重复的内容依次排列在另外一列?譬如,我的a列有
b
b
b
a
a
a
c
c
我想把
b
a
c
依次排列在b列,
由于数据需要更新,a列不重复的内容可能不止abc,所以想写一段代码来实现,请问vba代码该怎么写?谢谢各位老师
最佳答案
2012-3-6 17:44
  1. Sub test()
  2.     Dim d As Object
  3.     Dim i As Long
  4.     Dim ar
  5.     On Error Resume Next
  6.     Set d = CreateObject("scripting.dictionary")
  7.     ar = Range("a1:a" & Range("a65536").End(xlUp).Row)
  8.     For i = 1 To UBound(ar)
  9.         d(ar(i, 1)) = ""
  10.     Next i
  11.     Range("b:b").Clear
  12.     Range("b1").Resize(d.Count, 1) = Application.Transpose(d.keys)
  13. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-3-6 17:44 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim d As Object
  3.     Dim i As Long
  4.     Dim ar
  5.     On Error Resume Next
  6.     Set d = CreateObject("scripting.dictionary")
  7.     ar = Range("a1:a" & Range("a65536").End(xlUp).Row)
  8.     For i = 1 To UBound(ar)
  9.         d(ar(i, 1)) = ""
  10.     Next i
  11.     Range("b:b").Clear
  12.     Range("b1").Resize(d.Count, 1) = Application.Transpose(d.keys)
  13. End Sub
复制代码
回复

使用道具 举报

发表于 2012-3-6 17:44 | 显示全部楼层
本帖最后由 cbg2008 于 2012-3-6 17:51 编辑

这个是典型的字典解法

'声明函数名与参数,参数不确定
'第一参数为必须参数,其后为可选参数。参数可以是区域、文本、常量数组,及表达式
Function only(Item As Long, ParamArray rng()) As String
  With CreateObject("scripting.dictionary")  '创建字典引用
    On Error Resume Next   '防错
    Dim arr, cell As Range, cell2 As Variant, arr2 '声明变量
    For Each arr In rng  '遍历参数rng
      If TypeName(arr) = "Range" Then '如果参数是单元格引用
        For Each cell In arr '遍历所有单元格
        If Len(cell) > 0 Then .Add CStr(cell.Text), "" '如果单元格非空,则加入字典中
        Next cell
      ElseIf TypeName(arr) = "Variant()" Then '如果是数组
        For Each cell2 In arr  '遍历数组的每一个元素
         If Len(cell2) > 0 Then .Add CStr(cell2), "" '添加到字典中
        Next cell2
      ElseIf TypeName(arr) = "Error" Then '如果错误值
                        '完全忽略
      Else  '如果是其它值
         If Len(arr) > 0 Then .Add CStr(arr), ""  '如果非空,则加入字典中
      End If
    Next
    arr2 = .keys '输出字典的关键字
    only = arr2(Item - 1) '取值,赋予函数作为结果
  End With
End Function

回复

使用道具 举报

 楼主| 发表于 2012-3-6 18:12 | 显示全部楼层
hrpotter 发表于 2012-3-6 17:44

太谢谢啦 如果是把b列再排个序哪?
回复

使用道具 举报

发表于 2012-3-6 18:31 | 显示全部楼层
ampa 发表于 2012-3-6 18:12
太谢谢啦 如果是把b列再排个序哪?

排序的话直接点排序就行了呀,或者录个排序的宏,放在刚才的代码后面就行了
回复

使用道具 举报

发表于 2013-3-31 16:19 | 显示全部楼层
hrpotter 发表于 2012-3-6 17:44

【求助】帅哥能不能抽空看看帮我遇到的问题了,谢谢了。
http://www.excelpx.com/thread-298256-1-1.html
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 00:04 , Processed in 0.582283 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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