Excel精英培训网

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

[已解决]求一个多条件下提取不重复数值的公式

[复制链接]
发表于 2013-1-8 01:05 | 显示全部楼层 |阅读模式
工作中遇到一个问题,想了好几天也没有好的方案解决,所以在这里求助各位大大们啦

我要一个在多条件下提取不重复数值的公式.
数据源里有3列,想提取A列满足A条件,B列满足B条件,所对应的C列的不重复数据.
不想用宏,因为数据太多用宏循环处理起来好像很慢的样子,想问问大大们有没有什么好的公式

提取多重条件下的不重复数值.zip (38.09 KB, 下载次数: 597)
发表于 2013-1-8 08:38 | 显示全部楼层
本帖最后由 业余爱好者 于 2013-1-8 08:42 编辑

I3=INDEX($D:$D,SMALL(IF(($B$3:$B$54=$G3)*($C$3:$C$54=$H3),ROW($B$3:$B$54),65536),COLUMN(A1)))&""

然后向右向下填充,是不是你想要的?

看来你的要求有点要,上面公式不合适

评分

参与人数 1 +2 收起 理由
孤单无所谓 + 2 公式有错误哦!多条件不重复哦。版版

查看全部评分

回复

使用道具 举报

发表于 2013-1-8 09:08 | 显示全部楼层
I2=INDEX($D:$D,SMALL(IF($B$3:$B$54&$C$3:$C$54=$G3&$H3,IF(MATCH($D$3:$D$54,$D$3:$D$54,)=ROW($B$3:$B$54)-2,ROW($B$3:$B$54),99),4^8),COLUMN(A1)))&""

试试这个,没找到更好的办法
回复

使用道具 举报

发表于 2013-1-8 10:25 | 显示全部楼层
  1. =IFERROR(INDEX($D:$D,SMALL(IF($B$3:$B$54&$C$3:$C$54=$G3&$H3,IF(MATCH($B$3:$B$54&$D$3:$D$54,$B$3:$B$54&$D$3:$D$54,)=ROW($1:$52),ROW($3:$54))),COLUMN(A1))),"")
复制代码
数组公式,右拉下拉
此公式更加精确了一点,比如B14中,把当前款号变成1061902201,地区级别不变,你在返回结果看一下就明白了
回复

使用道具 举报

发表于 2013-1-8 14:43 | 显示全部楼层
本帖最后由 490540970 于 2013-1-8 14:44 编辑
zhc3288 发表于 2013-1-8 10:25
数组公式,右拉下拉
此公式更加精确了一点,比如B14中,把当前款号变成1061902201,地区级别不变,你在返回 ...


Private Sub CommandButton1_Click()
Dim d
Dim arr(), brr(), drr()
Dim crr() As String
Set d = CreateObject("scripting.dictionary")
endrow = [a65536].End(3).Row
For i = 3 To endrow
    str1 = Cells(i, 2).Value & "," & Cells(i, 3).Value
    If Not d.exists(str1) Then
        d.Add str1, Cells(i, 4).Value
    ElseIf InStr(d(str1), Cells(i, 4).Value) = 0 Then
        d(str1) = d(str1) & "," & Cells(i, 4).Value
    End If
Next
arr = d.keys
brr = d.items
ReDim drr(0 To endrow, 0 To 30)
For i = 0 To d.Count - 1
    str2 = arr(i) & "," & brr(i)  'key与item值相连
    crr = Split(str2, ",")
    For j = 0 To UBound(crr, 1)
        drr(i, j) = crr(j)
    Next
Next
Range("g24").Resize(1000, 30).Clear
Range("g24").Resize(UBound(drr, 1), UBound(drr, 2)) = drr
End Sub

提取多重条件下的不重复数值.zip

47.09 KB, 下载次数: 161

回复

使用道具 举报

发表于 2013-1-8 16:18 | 显示全部楼层    本楼为最佳答案   
其实还是老方法:
  1. =INDEX($D:$D,SMALL(IF(ISERROR(0/(MATCH($G3&$H3&$D$3:$D54,$B$3:$B54&$C$3:$C54&$D$3:$D54,)=ROW($1:52))),4^8,ROW($3:54)),COLUMN(A1)))&""
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-1-8 22:52 | 显示全部楼层
CheryBTL 发表于 2013-1-8 16:18
其实还是老方法:

我试了下,却是能算出来,很牛很牛啊~~~~

不过我最终还是放弃公式了.......我的数据源有3000+行   右边有30行,每行需要算8个列.所以呢    我那3核处理器算了七八分钟..........
回复

使用道具 举报

发表于 2013-1-9 10:50 | 显示全部楼层
学习一下!!!{:4212:}
回复

使用道具 举报

发表于 2015-4-13 01:37 | 显示全部楼层
公式只能向右拉,如果向下拉应怎样改动?
回复

使用道具 举报

发表于 2015-6-16 17:22 | 显示全部楼层
没搞清楚 !
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 10:27 , Processed in 0.444851 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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