2011-09-22 3 views
1

Vlookup의 제한 사항은 단일 열 아래로 값을 검색한다는 것입니다. 여러 열과 여러 행을 검색해야합니다.Excel에서 여러 열 및 행에 대한 검색

Guest1 Host1 
Guest2 Host1 
Guest3 Host1 

그래서 나는 범위 내에서 손님의 이름을 조회 할 :이 같은 두 개의 열 쌍을 아래로 변환 할 필요가

HOST1 Guest1 Guest2 Guest3 Guest4 
HOST2 Guest5 Guest6 Guest7 Guest8 

:

나는 다음과 같은 형식의 데이터가 , b1 : e2를 사용합니다. 그런 다음 행 번호를 잡고 {A $ rownumber}의 값을 가져옵니다.

이러한 여러 종류의 다중 행 검색을 수행 할 수 있습니까? 또는 모든 검색이 1 차원 벡터로 제한됩니까?

+0

예를 들어 한 호스트에서 모든 게스트를 반환하겠습니까? Guest4가 포함 되나요? – Brad

+0

예, 미안하지만 나는 자세히 설명하지 않았습니다. 요점은 게스트의 모든 값에 대해 두 개의 열, "게스트"및 해당 "호스트"를 갖는 것입니다. 모든 손님을 포함하는 별도의 열이 있다고 가정합니다. –

답변

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() 이벤트 (일반 하위 물론 개명했다) 모든 워크 시트를 다른 워크 시트에서 반복하는 범위로 출력 할 수 있습니다.

희망이 있습니다.

관련 문제