2011-09-22 9 views
1

Vlookupの制限は、単一の列の値を検索することです。私は複数の列と複数の行を検索する必要があります。Excelで複数の列と行を検索する

Guest1 Host1 
Guest2 Host1 
Guest3 Host1 

は、だから私は範囲で、ゲストの名前を検索したい:私はこのような2つの列のペアにそれを変換する必要があり

HOST1 Guest1 Guest2 Guest3 Guest4 
HOST2 Guest5 Guest6 Guest7 Guest8 

は、私は次の形式でデータを持っています、b1:e2となる。 次に、行番号を取得し、{A $ rownumber}の値を取得します。

このような複数列の複数行の検索は可能ですか?または、すべての検索が1次元ベクトルに限定されていますか?

+0

この例では、すべてのゲストを1つのホストの下に戻しますか?ゲスト4は含まれますか? – Brad

+0

はい、申し訳ありませんが、私は完全に詳しく説明しませんでした。ポイントは2つの列、ゲストのすべての値のための "ゲスト"と対応する "ホスト"を持つことです。すべてのゲストを含む別の列があるとします。 –

答えて

0

ダブルルックアップの方法はINDEX(MATCH(...), MATCH(...))です。 Excel 2003の を使用すると、それを行うルックアップウィザードをアクティブにすることもできます。

0

ComboBox1というコンボボックスとTextBox1(複数行プロパティが有効)というユーザーボックスを作成しました。ユーザーフォーム(UserForm1)を読み込むと、Initializeイベントは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()イベント(もちろん、名前を変更し、定期的なサブを作りました)すべてのゲストを別のワークシートを反復処理している範囲に出力します。

希望すると助かります!