스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon


Wiki/Google Spreadsheet

2021. 8. 28. 14:18

  • 구글 스프레드시트에서 다중 조건으로 값을 찾는 방법에 관한 글입니다.
  • 여러 방법이 있겠지만, 저는 arrayformula와 vlookup을 이용하여 이 문제를 해결했습니다.

문제

  • vlookup을 쓰다보면, 조건을 하나가 아닌 여러 컬럼으로 조건을 걸어야 할 때가 있다.
  • 하지만, vlookup 하나만으로는 이 문제를 해결하기 쉽지 않다.

해결 방법

  • 아래와 같은 방법으로 vlookup에 다중 조건을 걸 수 있다. 복잡해 보이지만, 막상 하면 어렵지 않다.
    • ARRAYFORMULA(VLOOKUP(찾는 기준이 되는 키1&찾는 기준이 되는 키2, {검색 대상 테이블의 키1 전체&검색 대상 테이블의 키2 전체, 검색 대상 테이블에서 갖고 오고 싶은 열}, 2, 0))
  • 아래의 스크린샷은 연도와 월을 기준으로 성수기 여부 열을 가져오는 예제다.
    • 왼쪽 테이블엔 연도, 월, 사용자수가 있었고, 오른쪽 테이블엔 연도, 월, 성수기 여부가 있었다.
    • 양쪽 테이블에 연도와 월 열이 있으므로 이를 조합해 키로 삼고, 성수기 여부 열을 가져와서 왼쪽 테이블에 병합했다.
  • 여기서 주의할 점은 아래와 같다.
    • arrayformula가 vlookup을 감싸고 있는 형태여야 한다.
    • vlookup의 두번째 파라미터인 '범위'는 중괄호 형태여야 한다.
    • 중괄호로 묶은 범위는 쉼표를 기준으로 컬럼을 구분한다.
스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon
arrayformula + vlookup

참고 문서

  • [공식 문서] ARRAYFORMULA
  • [공식 문서] VLOOKUP


VLOOKUP 함수로 2개 이상 다중조건 검색 : 활용(4) + TEXTJOIN 함수, FILTER 함수와 차이, 셀 공란반영에 대한 엑셀과 구글 스프레드시트 차이

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon
미드옵2021. 4. 19. 16:43

이번에 이야기 할 것은 VLOOKUP 함수로 2개 이상 다중조건을 검색하는 방법이다. 예전에 잠깐 소개한 적은 있었는데 이번에는 FILTER 함수와 비교하여 몇가지 추가 설명하고자 한다.

로직트리(8)번째 예제로 소개했던 내용으로 본다면..

VLOOKUP과 FILTER 함수는 조건검색(Conditional Searching)에 있어 중심이 되는 함수 두가지다.

VLOOKUP 함수의 기본 기능은 단일 조건에 맞는 값을 찾아서 반환한다.

조건에 맞는 데이터가 여러개가 있더라도 하나만 반영하는데 비해 FILTER 함수는 다중조건 검색이 가능하면서도 조건에 맞는 데이터가 여러개 있으면 모두 반환하는 기능을 가지고 있다.

참고로 이후 소개할 DGET 함수의 경우는 다중조건 검색에 단일 값 반환이다.

함수 자체로만본다면 VLOOKUP으로는 2개이상의 조건을 만족하는 값을 찾을 수 없으나, 관점을 바꿔 2개 이상의 다중조건을 단일조건으로 바꾼 후 VLOOKUP을 걸어주는 것이다.

실제로 업무상에 이 두함수를 사용하게 되는 상황은 근본적으로 다를 수 밖에 없는데...

예제에서는 비교차원에서 FILTER함수를 같이 설명했으니 그 부분은 참고하고 예제를 살펴보도록 하자.

( * 해당 동영상은 포스팅 맨아래 네이버TV 참조 )

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

첫번째 조건 '시리즈'와 두번째 조건 '코드명' 두가지 모두 맞는 모델명을 찾아 반환해야 한다.

이에 대한 품목정보는 아래 '품목DB'에 위치해 있다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

예제서 품목정보가 들어있는 '품목DB'시트에는 2개의 조건을 동시에 만족하는 모델이 중복없이 하나씩 매칭되어 데이터가 기입되어 있는 상황이다.

VLOOKUP 함수를 설명하기 전에 먼저 다중조건을 만족하는 데이터를 모두 반환해 주는 FILTER 함수를 살펴보자.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

각 셀이 FILTER 함수 적용적용

=FILTER(품목DB!$D$3:$D$102,품목DB!$B$3:$B$102=A3,품목DB!$C$3:$C$102=B3)

3~5행에 입력된 조건에 맞는 값은 하나씩 밖에 없으므로 정상적으로 모델명이 반환 되었다.

그렇다면 오류가 나는 부분에 대해 한번 살펴보자...

6~7행의 경우엔 오류가 나있다.

이유를 살펴보면 두개의 조건이 모두 공란일 경우 '품목DB'시트를 보면 그에 매칭되는 값 역시 공란인데 이를 만족하는 값이 여러개 있어 그에 맞는 모든 값을 반환시키게 된것이다.

그런데 바로 그 다음행에 FILTER함수가 기입되어 있으니 '분할범위가 비어있지 않아 오류가 발생'하게 된 것이다.

또 다른 오류는 오피스365 버전에서도 아직 그대로인 엑셀의 단점으로...

예제에서는 FILTER함수를 8행까지 드래그해서 반영했으므로, 마지막 8행 이후의 셀은 비어있어 공란 2개의 조건을 만족하는 값 '0'을로 모두 반환한 것을 볼 수 있다.

문제는 '공란'을 반영해야 함에도 '0'을 반환했다는 것이다.

이것은 FILTER함수의 문제가 아니라 엑셀에서는 기본적으로 공란을 '0'으로 반환하기 때문이다.

이런 이유로 공란과 0을 정확히 구분하기 위해 IF함수를 추가하여 강제로 구분시켜 준다.

이게 무슨 문제라도? 라고 생각한다면…

데이터가 비어있다는 것과 0이라는 것은 전혀 다른 상황으로 거짓값을 반환해 준다는 뜻이다.

반면에 구글 스프레드시트의 경우엔 '공란'을 그대로 반환해 준다.

(이 부분이 엑셀과 구글 스프레드시트의 차이점 중 하나이다.)

동일한 예제에 FILTER함수를 적용한 아래 그림을 비교해 보자.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

구글 스프레드시트의 경우 공란을 반영해 준다.

이제 포스팅의 주제인 VLOOKUP으로 돌아와 2개 이상의 중복조건을 검색하는 방법을 살펴보자.

앞에서 언급했듯이 간단하다.

2개 또는 그 이상 여러개라는 조건자체를 단일조건으로 만들어 진행한다.

단일조건은 아래와 같이 열을 하나 추가하여 두개의 조건을 하나로 합친다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

=C3 & "/" & D3

=IF(C3="","",C3 & "/" & D3)

예제에서는 &와 " "를 이용하여 문자열을 만들었다. (&와 " "를 이용한 문자열 조합은 네이버포스트 참조)

구분자는 되도록 잘 사용하지 않는 기호를 쓰는게 좋으며 예제는 / 를 사용하였다.

추가로 조건이 공란인 경우에도 / 를 반환하게 되므로 IF함수를 추가하여 공란을 반환하도록 하였다.

( * 구지 두개의 조건을 구분자(/)를 사용하여 연결하는 이유는 합쳐진 조건을 다시 두개로 분리할때 편하기 때문이다. 예들 들자면 이전 QR코드 생성에 있어 여러개의 정보를 구분자와 함께 QR코드 정보로 지정해 놓으면, 반대로 QR코드에서 구분자를 기준으로 손쉽게 특정 정보만 뽑아낼 수 있다. )

이 경우 TEXTJOIN함수를 사용하여 구성하면 아래의 그림처럼 공란일 조건도 같이 처리할 수 있다.

항상 하는 말이지만 어떤 함수를 사용할지는 개인 선택사항이다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

TEXTJOIN 함수를 사용

=TEXTJOIN("/",1,C3:D3)

TEXTJOIN 함수의 두번째 인수를 1(TRUE)로 입력하면, 공란일 경우를 포함시키지 않는다.

( TEXTJOIN 함수는 블로그 포스팅 참조.)

구글 스프레드시트의 경우엔...

품목DB가 계속 추가될것을 고려하여 ARRAYFORMULA 함수를 걸어두면 좋다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

ARRAYFORMULA 함수 적용

=ARRAYFORMULA(IF(C3:C="","",C3:C & "/" & D3:D))

다음으로 VLOOKUP 함수를 적용할 두번째 Transaction 시트에도 동일하게 열 추가를 하고 두개의 조건을 하나로 합쳐준다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

VLOOKUP 함수를 적용할 시트에도 열을 추가하여 두개의 조건을 하나로 합친다.

이제.. 새로 추가된 열에 대해 VLOOKUP 함수를 적용해주기만 하면 된다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

문자열을 조합한 열에 대해 VLOOKUP을 걸어준다.

=VLOOKUP(A3,'품목DB'!B:E,4,0)

예제에서는 품목DB 시트의 데이터가 계속 추가되는 것을 고려하여 B~E열 전체를 검색범위로 잡았다.

조건이 2개가 아니라 그 이상이 되더라도 위와 같이 하나의 문자열로 조합하여 적용하면 된다.

마지막으로 구글 스프레드시트에서는...

역시나 ARRAYFORMULA 함수를 사용하여 전체행 적용을 걸어두는게 좋다.

=ARRAYFORMULA(VLOOKUP(A3:A,'품목DB'!B:E,4,0))

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

ARRAYFORMULA 함수 적용

만약, 해당 파일을 여러사람이 공동작업 한다면 단일조건검색으로 만든 열에 대해 시트보호를 걸어두고 숨김처리를 해 두는게 좋다.

스프레드시트 vlookup 다중조건 - seupeuledeusiteu vlookup dajungjogeon

다음 포스팅에서 소개할 VLOOKUP 함수 활용은...

IF,IFS함수 대신 값의 범위조건에 맞는 데이터를 반환하는 방법에 대한 이야기다.

👉 해당내용 관련 네이버TV "구독!" : https://tv.naver.com/v/19713829