|
前边我们学习了简单操作版得一对多的查询,现在我们学习一下通过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 |
|