Excel精英培训网

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

[已解决]多列去重问题

[复制链接]
发表于 2014-8-21 16:11 | 显示全部楼层 |阅读模式
用VBA完成下面的问题:把所有教师列中的教师名单,合并成一列并去掉重复姓名,引用到工作表“教师名单”中的B列中,如何实现。
最佳答案
2014-8-21 16:36
  1. Sub t()
  2.   Dim arr, i&, j%, d As Object
  3.   arr = Sheets("总日课表").Range("C3").CurrentRegion.Value
  4.   Set d = CreateObject("scripting.dictionary")
  5.   For i = 4 To UBound(arr)
  6.      For j = 4 To UBound(arr, 2) Step 2
  7.         If Len(arr(i, j)) And Not d.exists(arr(i, j)) Then d(arr(i, j)) = ""
  8.      Next
  9.   Next
  10.   Sheets("教师名单").Range("B2").Resize(d.Count) = Application.Transpose(d.keys)
  11. End Sub
复制代码

多列去重问题.rar

57.03 KB, 下载次数: 80

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-8-21 16:30 | 显示全部楼层
B2复制以下公式
三键回车(公式复制后,点一下公式编辑栏的任意位置,先按住 shift、ctrl 两个键,然后敲enter键)
下拉;
=INDIRECT("总日课表!"&TEXT(SMALL(IF((总日课表!$3:$3="教师")*(COUNTIF($B$1:B1,总日课表!$3:$3)=0),COLUMN(总日课表!$4:$43)*100+ROW(总日课表!$4:$43)),ROW(A1)),"r0c00"),)
回复

使用道具 举报

发表于 2014-8-21 16:36 | 显示全部楼层    本楼为最佳答案   
  1. Sub t()
  2.   Dim arr, i&, j%, d As Object
  3.   arr = Sheets("总日课表").Range("C3").CurrentRegion.Value
  4.   Set d = CreateObject("scripting.dictionary")
  5.   For i = 4 To UBound(arr)
  6.      For j = 4 To UBound(arr, 2) Step 2
  7.         If Len(arr(i, j)) And Not d.exists(arr(i, j)) Then d(arr(i, j)) = ""
  8.      Next
  9.   Next
  10.   Sheets("教师名单").Range("B2").Resize(d.Count) = Application.Transpose(d.keys)
  11. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-8-21 16:37 | 显示全部楼层
baksy 发表于 2014-8-21 16:30
B2复制以下公式
三键回车(公式复制后,点一下公式编辑栏的任意位置,先按住 shift、ctrl 两个键,然后敲enter ...

怎么连科目也出来了呀,我只想要教师名单
回复

使用道具 举报

发表于 2014-8-21 16:41 | 显示全部楼层
yangfx163 发表于 2014-8-21 16:37
怎么连科目也出来了呀,我只想要教师名单

公式更新;
=INDIRECT("总日课表!"&TEXT(SMALL(IF((总日课表!$3:$3="教师")*(COUNTIF($B$1:B1,总日课表!$3:$3)=0),ROW(总日课表!$4:$43)*100+COLUMN(总日课表!$4:$43)),ROW(A1)),"r0c00"),)
回复

使用道具 举报

发表于 2014-8-21 16:49 | 显示全部楼层
yangfx163 发表于 2014-8-21 16:37
怎么连科目也出来了呀,我只想要教师名单

再次更新;
=INDIRECT("总日课表!"&TEXT(SMALL(IF((总日课表!$D$3:$BH$3="教师")*(COUNTIF($B$1:B1,总日课表!$D$4:$BH$40)=0),ROW(总日课表!$D$4:$BH$40)*100+COLUMN(总日课表!$D$4:$BH$40)),ROW(A1)),"r0c00"),)
回复

使用道具 举报

 楼主| 发表于 2014-8-21 16:51 | 显示全部楼层
baksy 发表于 2014-8-21 16:41
公式更新;
=INDIRECT("总日课表!"&TEXT(SMALL(IF((总日课表!$3:$3="教师")*(COUNTIF($B$1:B1,总日课表! ...

我使用公式后,怎么没有去掉重复的教师名单呀
回复

使用道具 举报

发表于 2014-8-21 16:54 | 显示全部楼层
yangfx163 发表于 2014-8-21 16:51
我使用公式后,怎么没有去掉重复的教师名单呀

请用6楼的公式。
回复

使用道具 举报

 楼主| 发表于 2015-12-26 18:18 | 显示全部楼层
baksy 发表于 2014-8-21 16:54
请用6楼的公式。

baksy你好:
         我今天又用了一下你那个6楼上的公式,发现,有丢掉名单的现象,差不多10名,这是为什么呢?也谢谢你的帮助与支持。
回复

使用道具 举报

发表于 2015-12-26 18:52 | 显示全部楼层
yangfx163 发表于 2015-12-26 18:18
baksy你好:
         我今天又用了一下你那个6楼上的公式,发现,有丢掉名单的现象,差不多10名,这是为 ...

请重新发帖求助吧。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 17:24 , Processed in 0.310861 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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