启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 94|回复: 0

Excel一对多查询(VBA版)

[复制链接]

2

主题

3

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2023-1-7 19:26:10 | 显示全部楼层 |阅读模式
前边我们学习了简单操作版得一对多的查询,现在我们学习一下通过VBA进行一对多的查询,还是以名单为例,我们进行一下分析:


    首先我们要分析数据源表格以及想要的表格的数据,我们以姓名为例:


    1、通过关键字找到相对应的列,以表格为例range("B2:B8"),我们需要使用到for循环,对range("B2:B8")中的每一个值进行循环,通过if语句查找"李四"对应的单元格;
    2、找到对应的李四的单元格,我们可以通过offset偏移进行寻找单元格,例如:第一个李四的“工号”单元格可以是range("B3").offset(0,-1)来表示,其中offset中的“0”代表本行,“-1”代表向左移一列,想要向右移一列就写成1就可以;
    3、我们找到对应的单元格之后,就可以将通过copy将相应的数据复制到I2单元格,如下:range("B3").offset(0,-1).copy [i2],该过程涉及到for循环。
    4、如果我们输入的姓名在原表格中没有,可以用msgbox 进行提示;
具体代码如下:
Sub 一对多查询()
Dim ss As Range, ss1 As Range, n%
Range("i:l").Clear
n = 1
Set ss = Range([b2], Cells(Rows.Count, 2).End(xlUp))
Range("a1", Cells(1, Columns.Count).End(xlToLeft)).Copy [i1]
For Each ss1 In ss
    If ss1.Value = Range("G6") Then
        ss1.Offset(0, -1).Resize(1, 4).Copy Cells(n + 1, "i")
        n = n + 1
    End If
Next ss1
If Range("i2") = "" Then
    MsgBox "你输入的名字: " & Range("G6") & " 不正确"
End If
End Sub
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|启明办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

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