在excel中查找多个列和行

Vlookup的限制是它search一个单一列的价值。 我需要跨多列和多行search。

我有以下格式的数据:

HOST1 Guest1 Guest2 Guest3 Guest4 HOST2 Guest5 Guest6 Guest7 Guest8 

我需要将其转换为两列对,如下所示:

 Guest1 Host1 Guest2 Host1 Guest3 Host1 

所以我想在第一个例子中的范围b1:e2中查找客人的名字。 然后抓住行号,并获取{A $ rownumber}的值。

是否有可能做这种多列,多行search? 还是所有的search都限于一维向量?

双重查找的方法是使用INDEX(MATCH(...), MATCH(...)) 。 在Excel 2003中,你甚至可以激活查找向导来为你做。

我用名为ComboBox1的combobox和称为TextBox1(启用了多行属性)的文本框创build了一个用户窗体。 当你加载用户窗体(UserForm1)时,Initialize事件将触发正在执行的UserForm_Initialize()。 这将填充与所有主机的combobox。 当您select一个主机时,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 

你可以看到你如何修改这个,以便遍历所有主机(即填充combobox),并为每个主机调用ComboBox1_Change()事件(当然重命名并定期创build子),以便将所有客人输出到某些您正在迭代另一个工作表上的范围。

希望能帮助到你!