잔머리 엑셀-lookup으로 한방에 판별하기

우리 병원은 원장님이 급내 많다. 열명 넘지 아마? 지금 재직하시는 분들만 얼추 열댓명은 되지 싶은데, 차트가 몇년 된거라 차트를 작성하는 시점에는 재직중이었지만 지금은 퇴사하신 원장님들도 계시다. 그리고 가끔 원장님의 재직 여부가 필요할 때가 있는데, 이럴때마다 신입사원 교육 자료를 뒤적이는 건 너무 허리아프고 귀찮아…

그럼 이거 룩업 써서 한방에 알 수 있게 하면 되지 않을까? 가 시발점이다.


잔머리 블루프린트

  1. 문제: 차트상 약어나 원장님 이름을 입력하면 재직중인지 알 수 있었으면 좋겠다
  2. 사용할 함수: VLOOKUP(표가 세로형), IFERROR
  3. 어떻게: 입력한 걸 vlookup으로 찾아서 결과를 표시한다.
  4. 결과가 어떻게 나왔나: 원장님의 재직 여부를 간단히 확인할 수 있게 되었다.

잔머리를 굴려보자

일단 실무에서는 원장님 이름과 약어를 표로 만들어서 쓰고 있지만, 예시에서는 우리 병원 원장님들 데이터를 안 쓸 예정이다. 아니 이름은 홈페이지 가면 나오는데 약어까지는… 이건 기밀사항이라 안됨.

일단 룩업이 뭐냐…

나 수능볼때는 H랑 V만 있었는데 걍룩업은 언제 추가된겨? 아무튼 저 삼종세트를 잘 굴리면 여러분도 효율적으로 일할 수 있다. 이번에 쓸 함수는 Vlookup인데 왜 저거냐면 표가 세로로 길거든. 가로로 긴 표면 Hlookup 쓰면 된다. 걍룩업은… 나도 모르것는디? 아니 나 수능볼때는 걍룩업이 없었어요…

아, H랑 V랑 헷갈린다고? H는 Horizontal, V는 Vertical이다. 호라이즌 하면 뭡니까. 지평선이잖음? 지평선 하면 뭐가 떠오릅니까? 넙대대한거 떠오르죠? 단어 어감부터 벌써 쮸왑쮸왑 길게 늘어날 것 같잖음. 일러스트레이터 자주 만지는 사람들은 오브젝트 반사할 때 대칭축도 수평(horizontal) 아니면 수직(vertical)으로 한다.

이거 놀랍게도 본인 포켓몬 이름이다. 아무튼… 표가 보면 세로로 길다. 아니 크기를 말하는 게 아니라, 제목이 위에 있고 데이터가 밑으로 쭉 나열되잖음. 그걸 말한거다. 그럼 여기서 약어를 입력하면 이름이나 포켓몬을 출력하고 없으면 없다고 뜨게 할 건데…

위에서부터 순서대로 1) 어떤 셀의 값을(님이 지정하는거) 2) 어떤 테이블에서(이것도 지정) 찾아서 3) 어떤 열의 값을 출력해라이고 마지막은 True or False인데, 이건 뭐냐면

0 혹은 false라고 쓰면 룩업 밸류와 딱 떨어지는 걸 찾고 0 혹은 true라고 쓰면 뭐 비슷한거 대~충 찾아준다… 뭐 이런건데 어차피 True 하면 N/A 떠서 끝에 0을 붙여줘야 한다. 아무튼 어떻게 할 거냐면

아잇 나 이거 다 알어! 하면 =VLOOKUP(B3,Sheet1!B2:D11,2,0) 쓰시면 되고…

근데 이거는 아직 반쪽짜리 구현이다. 왜냐하면 저기 없을때 없다고 나와야 하잖음? 그리고 우리 뭐 남았음? Iferror 남았다. Iferror는 오류가 났을 때 이렇게 처리해라~ 이런 의미인데, 대충 HTTP 404 오류 뜨면 404 페이지로 연결해주는 것과 비슷하다. 어떻게 보면 예외처리랑 같을…지도? 아무튼…

함수도 간단해서 위에 함수, 아래에 에러 뜨면 반환할 값 넣으면 된다.

복잡해보이지만 뜯어보면 간단하다. Iferror 함수의 value에 위에 그 vlookup을 넣는다. vlookup이 찾는 값이 없으면 N/A가 뜨는데, iferror는 1) 저 vlookup을 돌려서 N/A가 뜨면 2) 404 NOT FOUND를 출력해라 라는 의미. 그럼 거두절미하고 함 해보자.

결과

약어를 입력하니 포켓몬의 닉네임을 찾아준다. 이제 하다하다 샹델라 외국성 지어줄 거 없어서 중동까지 진출했다.

없는 걸 찾으면 N/A 오류가 뜨는데 iferror를 한번 거쳐서 404 NOT FOUND가 출력된다.

일할때는 약어로 검색할 때도 있고 이름으로 검색할 때도 있어서 입력란(과 함수)을 이름/약어로 나눠서 쓰고 있다. 물론 vlookup으로 찾는 범위도 다르다. 한가지 주의해야 할 것은, vlookup으로 찾을 때 범위 지정을 잘 해야 한다는 것이다. 위의 표가 3열인데 B, C, D행에 데이터가 기록되고 있다. 그러면 B행부터 D행까지를 지정하고 B행에서 찾아서 C행의 값이나 D행의 값을 출력하는 건 된다. 근데 범위를 B행에서 D행로 잡아놓고 C행 값으로 찾으면 안되더라. 이거는 더 알아봐야 할 것 같다. 아무튼 그래서 검색어에 따라 잡히는 표의 범위가 다르다.

이게 무슨 소리냐… 위의 예시에서는 B행부터 D행까지를 잡고 약어로 포켓몬의 닉네임을 검색했는데, 약어로 포켓몬의 닉네임이나 원래 어떤 포켓몬인지를 찾는 게 된다. 그런데 B행부터 D행까지를 범위로 잡고 닉네임으로 어떤 포켓몬인지 혹은 닉네임으로 약어를 검색하는 건 안된다. 닉네임으로 약어를 검색할거면 아예 범위를 C행부터 D행까지로 잡아야 한다 이 얘기.