簡體   English   中英

在Excel中跨多個列和行進行查找

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM