[英]Lookup across multiple columns & rows in excel
Vlookup的局限性在于它在单个列中搜索值。 我需要搜索多个列和多个行。
我有以下格式的数据:
HOST1 Guest1 Guest2 Guest3 Guest4
HOST2 Guest5 Guest6 Guest7 Guest8
我需要将其转换成两个这样的列对:
Guest1 Host1
Guest2 Host1
Guest3 Host1
因此,我想在第一个示例中的b1:e2范围内查找来宾的姓名。 然后获取行号,并获取{A $ rownumber}的值。
可以进行这种多列,多行搜索吗? 还是所有搜索都限于一维矢量?
双重查询的方法是使用INDEX(MATCH(...), MATCH(...))
。 在Excel 2003中,您甚至可以激活为您执行的查找向导。
我用一个名为ComboBox1的组合框和一个名为TextBox1的文本框(启用了多行属性)制作了一个用户表单。 当您加载用户窗体(UserForm1)时,初始化事件将触发执行UserForm_Initialize()。 这将用所有主机填充组合框。 当您选择一个主机时,ComboBox1_Change()事件将触发并将诸如HOST2 Guest5 Guest6 Guest7 Guest8
到文本框中。 但是,当然,您可以将输出更改为所需的任何位置。
Option Explicit
Dim allHosts As Range
Private pHostRow As Integer
Dim hostColumn As Integer
Private Sub UserForm_Initialize()
Dim Host As Range
Dim firstHost As Range
Dim lastHost As Range
Dim lastHostRow As Integer
hostColumn = 1
Set firstHost = Cells(1, hostColumn)
lastHostRow = firstHost.End(xlDown).Row
Set lastHost = Cells(lastHostRow, hostColumn)
Set allHosts = Range(firstHost, lastHost)
For Each Host In allHosts
ComboBox1.AddItem Host.Text
Next Host
End Sub
。
Private Sub ComboBox1_Change()
Dim selectedHost As String
selectedHost = ComboBox1.Text
pHostRow = allHosts.Find(selectedHost).Row
Dim guest As Range
Dim allGuests As Range
Dim firstGuest As Range
Dim lastGuest As Range
Dim lastGuestCol As Integer
Dim Host As Range
Set Host = Cells(pHostRow, hostColumn)
lastGuestCol = Host.End(xlToRight).Column
Set firstGuest = Host.Offset(0, 1)
Set lastGuest = Cells(pHostRow, lastGuestCol)
Set allGuests = Range(firstGuest, lastGuest)
TextBox1.Text = selectedHost
For Each guest In allGuests
TextBox1.Text = TextBox1.Text & selectedHost & guest.Text & vbCrLf
'if you weren't outputting this to a textbox you wouldn't use the vbCrLf,
'instead you would iterate to the next line in your output range.
Next guest
End Sub
您可以看到如何修改此设置,以便遍历所有主机(即在填充组合框时),并对每个主机调用ComboBox1_Change()事件(当然,已重命名并作了常规子例程)以将所有来宾输出到某些主机。您在另一个工作表上迭代的范围。
希望能帮助到你!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.