请选择 进入手机版 | 继续访问电脑版

Excel完美论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

 
版块
版块
班级
班级
班级
班级
其它
其它
查看: 1082|回复: 0

【Excel分享】一对多查询它最牛

[复制链接]

1万

积分

17

技术分

509

鲜花

管理员

佛山小老鼠

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

财富币
737855
学费币
3221
推广币
228852
学员红花
0
注册时间
2014-12-17

管理员基础技巧讲师函数讲师VBA编程讲师 透视表讲师

    购买在线课件和视频
    报班咨询联系电话
    Tel:186-6424-3619
    联系人:佛山小老鼠
    在线网络开设YY班级
    函数初级班
    函数中级班
    函数高级班
    VBA编程初级班
    VBA编程中级班
    VBA编程高级班
    透视表班
    290集视频
    525集excel视频大全
    189集免费excel视频
发表于 2018-2-15 23:09:55 | 显示全部楼层 |阅读模式
一键分享 一键分享
大家新年快乐,祝大家在狗年,旺旺旺……,心想事成,身体健康。今天和大家分享“一对多查询它最牛”,如果数据上万行了,用一对多查询的数组公式会卡表,为了解决这个问题,建议大家用vba编程代码实现,也就是下面的方法2,用它才66666

一、数组公式实现一对多查询,数据多了会卡表
1、公式截图
11.jpg
2、公式
=INDEX(B:B,SMALL(IF($A$2:A8=$E$2,ROW($A$2:A8),2^20),ROW(A1)))&""
3、公式解释
  • 首先判断区域A2:A8是否有等于曹丽的,如果有就显示本身的行号,没有就没显示最大的行号1048576,2^20=1048576
  • 用small函数下拉第1小,第2小,第3小……
  • 最后用index函数把B列的数量引用过去
  • 为什么最后还要&"",目的是为了屏蔽0


二、vba编程实现
1、动画效果
00.gif
2、代码

Option Explicit
Sub 一对多查询()
    Dim arr1, x&, St$, arr2(1 To 100000, 1 To 1), k&
    'arr2定义为足够大的空间
    St = [E2]
    [F2:F1000].ClearContents '清空原有的数据
    arr1 = Range("A1").CurrentRegion '把数据区域写入数组
    For x = 2 To UBound(arr1) '循环数组arr1的行
        If arr1(x, 1) = St Then '如果有等于st那么就计数,装入数组arr2中
            k = k + 1
            arr2(k, 1) = arr1(x, 2)
        End If
    Next x
    If k = 0 Then Exit Sub '如果一个也找不到,就退出
    [F2].Resize(k, 1) = arr2
End Sub
3、复制上面的代码→快捷键Alt+F11→插入菜单→模块→粘贴代码→把光标定位到任意一行代码→快捷键F5



完美在线教育.rar

16.25 KB, 下载次数: 27

评分

参与人数 1鲜花 +2 收起 理由
明珠 + 2 大过年的,辛苦了。

查看全部评分


手机扫码浏览
问题咨询交流,不在线时,可以加我微信,微信号18664243619
函数、VBA、透视表交流学习QQ群2801--7317--4,我的电话18664243619,我的QQ732243800,更多的学习也可以关注我们的公众号:vba18664243619
回复

使用道具 举报

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

本版积分规则 快速回帖:

最近新开的班级:2018-7-28开vba初级班,周二、周四、周六晚上8点到10点上课      立即注册  登录 

手机微信——扫一扫 关注完美论坛公众号天天收到Excel分享

QQ|微信绑定|Archiver|手机版|Excel完美论坛 ( 粤ICP备14102225号  

GMT+8, 2018-9-25 21:39 , Processed in 0.112078 second(s), 54 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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