打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
今日头条

大家好,今天和大家分享“让您心服口服的一对多查询”,一对多查询在我们工作中也是常见的事,下面我以4种方法来讲解给大家

一、把查询结果放在一个单元格里

1、动画操作效果

2、公式截图

3、公式|更多Excel学习和问题请加群:289393114、570064677

=MID(SUBSTITUTE(PHONETIC(INDIRECT('A'&MATCH(,0/($A$1:$A$9=D1),)&':B'&MATCH(1,0/($A$1:$A$9=D1)))),D1,','),2,99)

4、公式解释

  • 要注意两点,第1点A列要排序,让相同的姓名挨在一起;第2点B列要是文本型的数字,因为函数PHONETIC连接数字时会显示空

  • 'A'&MATCH(,0/($A$1:$A$9=D1),)&':B'&MATCH(1,0/($A$1:$A$9=D1))根据查找值得到查找值姓名所在的区域文本表达式,外面嵌套的一indirect函数,让单元格区域文本表达式变为单元格区域,因为PHONETIC只支持单元格区域

  • MATCH(,0/($A$1:$A$9=D1),)这个公式的Match找第一个曹丽出现的位置

  • MATCH(1,0/($A$1:$A$9=D1))这个公式的Macth找最后一个曹丽出现的位置

  • 用substitute把曹丽替换成逗号,然后用mid函数从第2个位置提取,提取99个,目的就是让第1个逗号不要

二、把查询结果纵向显示

1、公式截图

2、公式

=INDEX(B:B,SMALL(IF($A$1:A9=$D$1,ROW($A$1:A9),2^20),ROW(A1)))&''

3、公式解释

  • 这个不要求A列排序,也不要求B列是文本型的数值

  • IF($A$1:A9=$D$1,ROW($A$1:A9),2^20)判断区域是否有等于“曹丽”,如果有就返回区域的行号,否则就返回2^20也就是1048576,2010版本最大的行号

  • 通过Small函数下拉,把第几小提取出来

  • 用index函数从B列把相应的数据引用出来

三、把查询结果横向显示

1、公式截图

2、公式

=INDEX($B:$B,SMALL(IF($A$1:$A$9=$D$1,ROW($A$1:$A$9),2^20),COLUMN(A1)))&''

3、公式解释

  • 和上面的公式原理一样,也是数组公式,记得复制好公式之后,要把光标点到编辑栏里,然后三键一齐下Ctrl+Shift+Enter

  • 由于是右拉,所以上面的公式Small第2参数Row(A1)改成Column(A1)

四、Vlookup函数实现一对多查询

1、公式截图

2、公式

=IFERROR(VLOOKUP($D$1&ROW(A1),CHOOSE({1,2},$A$1:$A$9&COUNTIF(INDIRECT('A1:A'&ROW($A$1:$A$9)),$D$1),$B$1:$B$9),2,0),'')

3、公式解释

  • 首先申明,如果现在现实工作中,不建议你用这种方法,这种方法练习可以。工作中建议大家采用上面2种方法

  • 公式$A$1:$A$9&COUNTIF(INDIRECT('A1:A'&ROW($A$1:$A$9)),$D$1)这个公式难理的地方在这里INDIRECT('A1:A'&ROW($A$1:$A$9)),用了多区域,这里有9个区域,A1一个区域;A1:A2一个区域;A1:A3一个区域;A1:A4一个区域;A1:A5一个区域;A1:A6一个区域;A1:A7一个区域;A1:A8一个区域;A1:A9一个区域;

  • 用countif函数统计这9个区域里的曹丽的个数,统计的结果相当于给每一个姓名编了号一样,从1开始编号,然后在前面连接A列的姓名,这样得到把相同的姓名变成不相同了

  • 最后用choose函数把连接的结果放在第1列,数量放在第2列,便可以用 vlookup函数引用了

五、vba自定义函数实现

1、动画效果

2、代码

Option Explicit

Function 一对多查询(SRg As Range, Rg1 As Range, y&)

Dim arr1, arr2(1 To 1000, 1 To 1), k, x

arr1 = SRg

For x = 1 To UBound(arr1)

If arr1(x, 1) = Rg1 Then

k = k + 1

arr2(k, 1) = arr1(x, 2)

End If

Next x

If y <= k="">

一对多查询 = arr2(y, 1)

Else

一对多查询 = ''

End If

End Function

3、操作方法

  • 第1步:快捷键Alt+F11打开vbe窗口

  • 第2步:插入菜单,插入模块

  • 第3步:复制上面的代码,粘贴到模块的空白处,就可以在工作表单元格使用此函数了

4、公式截图

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Sumif函数用法大总结
网友提的编号问题,群中只有少数几人写出了答案。你会解答吗?
VLOOKUP函数实现数据一对多查找
玩转VLOOKUP 之提取多个符合条件的结果
一对多查询?少不了这两刷子
使用VLOOKUP函数汇总多个工作表的数据,数据再多也不怕
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服