엑셀 카드 내역 정리, 키워드 분류 자동화 공식 사용법
카드 내역에서 사용된 키워드를 자동으로 인식하여 각 항목별 계정 과목을 자동으로 분류하는 함수의 동작원리 및 사용법을 살펴봅니다.
이 강의에서는 카드 매출이나 지출 증빙처럼 매번 무작위로 입력되는 항목을 키워드 기준으로 자동 분류하는 엑셀 공식을 다룹니다. INDEX, MATCH, ISNUMBER, FIND 함수를 단계별로 조합하여 단어 포함 여부를 확인하고 정확한 분류값을 반환하는 동작 원리와 오류 처리 방법까지 함께 정리합니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
실습 가이드
라이브 강의 전체영상도 함께 확인해보세요!
위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브강의 풀영상을 확인하실 수 있습니다.
키워드 분류 공식 요약 설명
실무에서 자주 수행하는 데이터 가공 작업을 살펴보면, 동일한 처리를 반복적으로 수행해야 하는 경우가 많습니다. 그중에서도 가장 많은 시간이 소요되는 작업이 바로 '데이터 분류(Categorizing)' 작업입니다.
분류 대상이 정해진 제품군이나 제한된 항목이라면 VLOOKUP 함수로 간단히 처리할 수 있습니다. 그러나 카드 매출이나 지출 증빙처럼 매번 무작위로 입력되는 항목은 각 값을 정확하게 분류하기 어렵습니다.
이처럼 분류해야 할 항목이 많고 각 값이 무작위로 입력되는 상황이라면, 아래의 키워드 분류 공식을 활용하여 자료를 손쉽게 분류(Categorizing)할 수 있습니다.
공식의 단계별 동작 원리는 아래에서 자세히 살펴보겠습니다.
=IFERROR(INDEX($출력범위,MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,ROWS($단어범위)+1))),"")

| 변수 | 설명 |
| $출력범위 | 키워드가 포함되어 있을 때 출력할 분류값이 입력된 범위입니다. 절대참조로 입력하는 것에 주의합니다. |
| $단어범위 | 단어(키워드)가 입력된 범위입니다. 절대참조로 입력하는 것에 주의합니다. |
| $단어범위시작셀 | 단어범위의 첫 번째 셀입니다. 절대참조로 입력하는 것에 주의합니다. |
| 대상셀 | 키워드 포함 여부를 확인할 대상 셀입니다. |
- ISNUMBER 함수와 FIND 함수를 함께 사용하면 특정 단어의 포함 여부를 확인할 수 있습니다. 특정 단어 포함 여부 확인 공식에 대한 자세한 설명은 아래 관련 포스트를 참고하시기 바랍니다.
=ISNUMBER(FIND($단어범위,대상셀))
- IF 함수를 사용하여 특정 단어가 포함되어 있을 경우 해당 순번을 반환하도록 작성합니다.
=IF(ISNUMBER(FIND($단어범위,대상셀)),순번,FALSE)
- ROW 함수를 배열 형태로 활용하면 1부터 시작하는 순번을 배열로 반환할 수 있습니다.
=ROW($단어범위)-ROW($단어범위시작셀)+1
- IF 함수와 결합하여 특정 단어가 포함되어 있을 때 해당 순번을 반환하도록 공식을 확장합니다.
=IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,FALSE)
- IF 함수의 결과는 "{FALSE,FALSE,3,FALSE,FALSE,...}"와 같이 배열로 반환됩니다. 따라서 MIN 함수를 사용하여 배열에서 가장 작은 숫자 하나를 순번으로 반환합니다.
=MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,FALSE))
- INDEX 함수를 사용하여 분류범위에서 해당 순번에 위치한 분류값을 반환합니다.
=INDEX($분류범위,MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,FALSE)))
- 위 공식에는 한 가지 문제가 있습니다. 대상 셀에서 키워드를 찾지 못하면 IF 함수가 FALSE를 반환하여 MIN 함수의 결과가 0이 되는데, INDEX 함수의 순번에 0을 입력하면 특정 값이 아닌 범위 전체를 배열로 반환하는 문제가 발생합니다.
'IF 함수로 FALSE가 반환될 경우, MIN 함수로 0 이 계산됩니다.
=INDEX($분류범위,MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,FALSE)))
=INDEX($분류범위,MIN({},,,,0)))
=INDEX($분류범위,0)
'분류범위의 모든 값이 배열로 반환됩니다. - 따라서 키워드를 포함하지 않는 경우, 0 대신 범위보다 큰 값을 강제로 입력하여 #REF! 오류가 출력되도록 수식을 변경합니다.
=INDEX($분류범위,MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,ROWS($단어범위)+1)))
- 마지막으로 IFERROR 함수를 적용하여 #REF! 오류가 발생할 경우 오류 메시지 대신 공백을 반환하도록 수식을 마무리합니다.
=IFERROR(INDEX($분류범위,MIN(IF(ISNUMBER(FIND($단어범위,대상셀)),ROW($단어범위)-ROW($단어범위시작셀)+1,ROWS($단어범위)+1))),"")
전 아직은 이해를 못하고 있으나, 열공하겠습니다.
감사합니다.
배열수식을 적용시킬 때, 범위를 드래그 잡은 상태에서 셀 수식입력, ctrl+shift+enter 해야 영상처럼 나오는데
배열수식을 적용시키기 위해선 항상 먼저 범위를 드래그해서 잡은 상태여야 하나요?
min함수 에서부터 전행이 9로 밖에 안나와서 보니까 find수식 서 B2부분이 안바뀌는데 이건 왜 그런건지...
강의에서 보여드린 대로 파란색 범위가 동적으로 출력되는 것은 365 버전에서만 지원됩니다. ^^; 따라서 16 버전에서는 강의 중간에 설명드리기 위해 보여드린 과정..(파란색 범위로 나오는 과정)은 사용이 불가능합니다.
대신 완성공식은 엑셀 모든 버전에서 사용가능합니다.
범위를 절대값으로 지정하지 마시고 동적범위로 한번 지정해보시겠어요?
https://www.oppadu.com/%EC%97%91%EC%85%80-%ED%95%A8%EC%88%98-%EB%AC%B4%EB%A3%8C-%EA%B0%95%EC%9D%98-%EB%8F%99%EC%A0%81%EB%B2%94%EC%9C%84-%EC%9C%A0%EB%8F%99%EB%B2%94%EC%9C%84-%EC%9E%90%EB%8F%99-%EB%AA%A9%EB%A1%9D/
"ROW($F$2:$F$32)-ROW($F$2)+1" 대신 "ROW($F$2:$F$32)-1"이렇게
적용해도 실행이 되네요 단순히 순번을 나타낸다면 "-1"을 해도 될 것 같습니다. 이렇게 해도 문제는 없는거죠?
아래글 정정합니다.
네 위에 적어드린 공식은 모든 상황에서 사용할 수 있도록 작성된 식입니다 :)
작성하신 것처럼 행번호를 직접 계산해서 입력하셔도 괜찮습니다.