Excel-여러 값을 반환하기 위해 vlookup하는 방법은 무엇입니까?


18

주어진 키에 대해 여러 참조 값을 조회하고 반환하기 위해 Excel을 사용하려고합니다. VLookup 은 필요한 것과 매우 유사한 작업을 수행하지만 단일 일치 항목 만 반환합니다.

배열 반환 및 처리 방법이 필요하다고 가정하지만 이전에는 이러한 방법을 다루지 않았습니다. 일부 인터넷 검색은 솔루션의 일부로 if ([lookuparray] = [value], row [lookuparray])에 의존하기 시작하지만 단일 일치 항목을 반환 할 수는 없지만 ...

예를 들어,이 참조 데이터가있는 경우 :

Adam    Red
Adam    Green
Adam    Blue
Bob     Red
Bob     Yellow
Bob     Green
Carl    Red 

오른쪽에 여러 반환 값을 얻으려고합니다. (가능한 경우 쉼표로 구분)

Red      Adam, Bob, Carl
Green    Adam, Bob
Blue     Adam
Yellow   Bob

(나는 이미 왼쪽에 키 값이 있습니다-그 값을 뽑을 필요가 없습니다)

이 맥락에서 여러 값을 처리하는 방법에 대한 도움이 필요합니다. 감사.

답변:


13

명시된 VLOOKUP을 사용하지 않고 여전히 공식을 사용하여 공식 접근 방식을 원한다고 가정하면 데이터를 배치하는 방법은 다음과 같습니다.

데이터 레이아웃

그런 다음 셀 C12에서 다음 수식을 사용했습니다.

=INDEX($C$2:$C$8, SMALL(IF($B12=$B$2:$B$8, ROW($B$2:$B$8)-MIN(ROW($B$2:$B$8))+1, ""), 1))

이것은 배열 수식이므로 복사하여 셀에 붙여 넣은 후에는 적중해야합니다 Ctrl+Shift+Enter. 그런 다음 오른쪽과 아래쪽으로 드래그했습니다.

남은 값이 없으면 #NUM!오류가 발생합니다. 업로드 된 이미지 예제에서 노란색에 대한 예제를 제공했습니다.

많은 행이있는 경우 VBA / 매크로 접근 방식이 더 나은 솔루션이라고 생각합니다.


순서가 중요하지 않은 경우 검색된 값을 합산하려는 경우 IF를 배열과 함께 사용하는 것이 더 간단합니다.=SUM(IF($B$2:$B$8="Key", $C$2:$C$8, 0))
Aralox

나는이 공식을 시도했지만 아래로 드래그 한 후 얻는 결과는 Adam과 Bob 만 반환합니다-내가 잘못하고 있습니까? 여기에 스크린 샷을 참조하십시오 snag.gy/qW7UKM.jpg
ziggy에서

@ziggy ctrl + shift + enter를 누르셨습니까?
Dan

5
  1. 색상이 A 열에 있고 이름이 B 열에 있도록 열을 교체 한 다음 색상을 정렬합니다.

  2. C2의 공식 (열에 복사) : = IF (A2> A1, B2, C1 & ","& B2)

  3. D2의 공식 (열에 복사) : = A2 <> A3

  4. 원하는 결과를 얻으려면 D 열에서 "TRUE"로 필터링하십시오. 아래를보십시오 :

여기에 이미지 설명을 입력하십시오


어렴풋한 CONCATENATE () 수식 대신 "&"연산자를 사용할 수 있습니다. 감사!
bpcookson

3

수식 접근 방식을 원하면 별도의 셀에서 결과를 얻는 것이 훨씬 간단하므로 첫 번째 테이블이 A2 : B8이고 색상이 D2 : D5에 다시 나열되어 있다고 가정합니다. E2에서이 공식을 사용해보십시오

=IFERROR(INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))),"")

확인 CTRL+SHIFT+ENTER하고 가로 및 세로로 복사 했습니다 . 경기가 다 떨어지면 당신은 공란을 얻습니다.

공식은 Excel 2007 이상을 가정합니다. 이전 버전 인 경우 IFERROR 대신 COUNTIF를 사용할 수 있습니다.

=IF(COLUMNS($E2:E2)>COUNTIF($B$2:$B$8,$D2),"",INDEX($A$2:$A$8,SMALL(IF($B$2:$B$8=$D2,ROW($B$2:$B$8)-ROW($B$2)+1),COLUMNS($E2:E2))))


3

VBA 솔루션은 다음과 같습니다. 먼저 결과는 다음과 같습니다.

스크린 샷

그리고 여기 코드가 있습니다 :

Option Explicit
Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String

    Dim s As String 'Results placeholder
    Dim sTmp As String  'Cell value placeholder
    Dim r As Long   'Row
    Dim c As Long   'Column
    Const strDelimiter = "|||"  'Makes InStr more robust

    s = strDelimiter
    For r = 1 To lookupRange.Rows.Count
        For c = 1 To lookupRange.Columns.Count
            If lookupRange.Cells(r, c).Value = lookupValue Then
                'I know it's weird to use offset but it works even if the two ranges
                'are of different sizes and it's the same way that SUMIF works
                sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
                If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                    s = s & sTmp & strDelimiter
                End If
            End If
        Next
    Next

    'Now make it look like CSV
    s = Replace(s, strDelimiter, ",")
    If Left(s, 1) = "," Then s = Mid(s, 2)
    If Right(s, 1) = "," Then s = Left(s, Len(s) - 1)

    LookupCSVResults = s 'Return the function

End Function
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.