실습형 교안 · 엑셀을 매일 쓰는 실무자 대상 · 2026년 10월판
엑셀 2026
신규 함수 실습
한 셀에 여러 값을 담는 목록과 셀 안 배열, 그 값을 찾고 펼치는 HAS·HASANY·HASALL·FLATTEN, 파일을 수식으로 불러오는 IMPORTCSV·IMPORTTEXT. 실제 엑셀 화면을 따라 하며 어떤 상황에 쓰고, 무엇이 달라지는지 익힙니다.

완성본 먼저 보기
세 차시를 마치면 이 통합 문서가 손에 남습니다
설명보다 결과부터 봅니다. 아래는 이 교안의 Step을 처음부터 끝까지 실제 엑셀에서 따라 한 결과입니다. 본문의 움직이는 화면도 모두 같은 파일을 만들며 녹화했습니다.
완성된 통합 문서
탭을 바꾸면 시트별 완성 화면이 보입니다. 정답 파일은 아래 실습 자료에서 내려받습니다.
정답 파일: 완성예시/엑셀_신규함수_실습_완성.xlsx (이 교안과 같은 폴더)
오늘 만드는 것과 통과 숫자
장마다 "이 숫자가 나오면 성공"이 정해져 있습니다. 모든 숫자는 실습 파일을 실제 엑셀(Windows 베타 채널, 빌드 20601)로 계산해 확인한 값입니다.
| 차시 | 만드는 것 | 통과 기준 | 만드는 곳 |
|---|---|---|---|
| 1차시 | 목록으로 바꾸고 HAS로 찾기 | 필터 3줄 · 이준 담당 3건, 예산 8,100 · 담당 인원 23 | 01~02장 |
| 1차시 | HASANY · HASALL | 주말 가능 5명 · 데이터 자격 3명 | 03장 |
| 2차시 | FLATTEN 빈도표 | 상위 세 업무 각 16 · 합계 68 | 04장 |
| 2차시 | 셀 안 배열 | 품목수 4, 4, 4, 3 · 베어링 2곳 | 05장 |
| 3차시 | IMPORTCSV · IMPORTTEXT | 금액 합계 6,117,000 · 한글 정상 · 재고 8품목 | 06~08장 |
실습 자료
하나씩 받기
모든 데이터는 연습용 예시입니다. 실명도, 실제 거래처도 없습니다.
들어가며
오늘의 순서와 준비
세 차시를 같은 실습 파일 하나로 이어 갑니다. 시작 전에 내 엑셀에 기능이 있는지 보고, 실습 폴더와 호환성 버전을 맞춥니다.
0.1오늘 다루는 함수
오늘은 2026년에 엑셀에 새로 들어온 함수를 세 묶음으로 나눠 실제로 써 봅니다. 함수마다 아직 일반 사용자에게 열리지 않은 것이 있어 상태를 먼저 확인합니다.
| 묶음 | 함수 | 하는 일 | 상태(2026-10-08) |
|---|---|---|---|
| 한 셀에 여러 값 | HAS, HASANY, HASALL | 목록 안에 값이 있는지 TRUE/FALSE로 | Insider 베타(Windows·Mac) |
| 한 셀에 여러 값 | FLATTEN | 셀 안에 묶인 값을 시트로 펼침 | Insider 베타(Windows·Mac) |
| 파일 불러오기 | IMPORTCSV, IMPORTTEXT | CSV·TXT 파일을 수식 하나로 불러옴 | Insider 베타(Windows) |
| AI | COPILOT | 셀에서 AI에게 물어 답을 받음 | 2026-09-14 폐지 |
함수 말고도 "목록"(셀 하나에 여러 값), "셀 안 배열"(수식 결과를 셀 하나에 가둠)이라는 새 기능이 함께 나왔습니다. 오늘 실습은 이 두 기능 위에서 돌아갑니다.
0.2내 엑셀에서 되는지 확인하기
엑셀 버전을 봅니다.
파일 > 계정 > Excel 정보에서 버전 번호를 확인합니다. 목록과 목록 함수(HAS·HASANY·HASALL·FLATTEN)는 Windows 2610(빌드 20520.20000) 이상, Mac 16.114 이상의 베타 채널에서 열립니다. 이 교안은 Windows 빌드 20601에서 실제로 돌려 찍었습니다.
삽입 탭의 "컨트롤" 묶음에 "확인란"과 "목록" 버튼이 보이면 준비된 것입니다.
실습 파일을 C:\엑셀실습 폴더에 풉니다.
C 드라이브에 엑셀실습 폴더를 만들고, 아래 자료를 내려받아 그 안에 둡니다. 3차시 불러오기 함수가 이 폴더 경로를 씁니다.
- 엑셀_신규함수_실습.xlsx: 시트 다섯 장(프로젝트, 직원, 설문, 주문, 설정)
- 일일매출_2026-10-07.csv, 일일매출_구시스템_2026-10-07.csv, 재고현황_창고.txt: 3차시용
탐색기에서 C:\엑셀실습 안에 실습 파일 네 개가 보이면 됩니다. 첫 화면의 zip으로 받았다면 정답 파일까지 다섯 개입니다.
통합 문서의 호환성 버전을 3으로 올립니다.
실습 파일을 열고 수식 > 계산 옵션 > 호환성 및 버전 > 버전 3(최신)을 누릅니다.

계산 옵션을 다시 열었을 때 "버전 3(최신)"에 체크가 있으면 됩니다.
셀 안 배열과 중첩 배열은 호환성 버전 3에서만 제대로 계산됩니다. 버전 2에 둔 채로 2차시를 하면 ={TEXTSPLIT("a,b,c",",")} 같은 수식이 #CALC!를 냅니다(이 PC에서 확인). 버전 설정은 통합 문서마다 따로라서 새 파일을 만들 때마다 다시 켭니다.
중요한 파일에는 아직 쓰지 않습니다
Microsoft는 목록과 셀 안 배열이 미리 보기 기능이라 정식 출시 전까지 중요한 통합 문서에는 쓰지 말라고 안내합니다. 오늘은 실습 파일로만 합니다.
한 셀에 여러 값, 목록과 HAS 함수
담당자 칸에 "이준, 박서연"처럼 이름 여럿을 적어 둔 표는 어느 회사에나 있습니다.
지금까지 이 칸은 글자 한 덩어리라 필터로 사람을 고를 수도, 계산에 쓸 수도 없었습니다. 1차시에는 이 칸을 목록으로 바꾸고 새 함수 HAS, HASANY, HASALL로 찾고 셉니다.
1차시 · 기초 1
쉼표로 이어 쓴 칸을 목록으로 바꾸기
프로젝트 표에서 "이준" 씨가 맡은 일만 보고 싶습니다. 담당자 칸 필터를 열고 "이준"을 검색했더니 "이준호" 씨 프로젝트까지 딸려 나옵니다.
이렇게 하세요
담당자, 필요기술, 승인자 칸을 목록으로 바꾸면 필터가 사람 한 명씩 나뉩니다.
범위를 고르고 삽입 > 목록(또는 Ctrl+J)을 누릅니다.
해 보기
목록으로 바꾸기 전 필터를 먼저 봅니다.
프로젝트 시트의 담당자 머리글 화살표를 누르고 검색 칸에 이준을 입력한 뒤 확인을 누릅니다.

6줄이 남습니다. "이준호, 김민지", "오세린, 이준호", "최우진, 이준호, 윤서아"까지 걸렸습니다.
필터 목록에 "김민지, 이준"처럼 줄 전체가 한 항목으로 보이는 것이 원인입니다. 엑셀은 이 칸을 글자 한 덩어리로 보고, 검색은 글자 일부가 겹치면 다 고릅니다. 확인했으면 필터를 풉니다(데이터 > 지우기).
세 칸을 목록으로 바꿉니다.
담당자 D2부터 승인자 F13까지 끌어서 고른 뒤 삽입 탭 > 목록을 누릅니다.

세 열의 셀마다 왼쪽에 작은 목록 아이콘이 생기면 됩니다. 아이콘을 누르면 항목이 한 줄씩 보입니다.
같은 필터를 다시 엽니다.
담당자 필터를 열면 맨 위에 "필드 선택: (목록 항목)"이 생기고 목록이 사람 한 명씩 나뉩니다. "(모두 선택)"을 끄고 "이준"만 체크합니다.

P01, P08, P12 세 줄만 남습니다. "이준호" 씨 프로젝트는 빠졌습니다.
왜 그럴까
목록은 쉼표 텍스트처럼 보이지만 엑셀 안에서는 값 여러 개가 따로 들어 있는 배열입니다. 이 PC에서 =TYPE(D2)로 재 보면 쉼표 텍스트는 2(글자), 목록으로 바꾼 뒤에는 64(배열)가 나옵니다.
필터가 항목 단위로 고르기 때문에 "이준"과 "이준호"가 섞이지 않습니다. 담당자를 줄마다 한 명씩 쪼개 행을 늘리지 않아도 프로젝트 한 줄에 사람 여럿이 붙은 모양 그대로 거를 수 있습니다.
엑셀 40년 동안 셀 하나에는 값 하나만 넣을 수 있었다는 Microsoft의 설명처럼, 이 기능은 표를 설계하는 방식 자체를 바꿉니다.
이런 방법도 있습니다
Ctrl+J: 범위를 고르고 누르면 삽입 > 목록과 같습니다. 한 번 더 누르면 목록이 다시 쉼표 텍스트로 돌아갑니다.- 같은 열에 이미 목록이 있으면, 아래 칸에 쉼표로 이어 쓰고 Enter만 쳐도 목록으로 바뀝니다.
- 지역 설정의 목록 구분 기호가 세미콜론인 PC라면 쉼표 대신 세미콜론으로 적어야 목록이 됩니다.
- 목록 기능이 없는 엑셀이라면 텍스트 필터 > 포함으로 고르되, 결과를 눈으로 다시 봐야 합니다. "이준"이 "이준호"를 함께 잡는 문제는 그대로 남습니다.
예전 수식은 목록 위에서 다르게 움직입니다
쉼표 텍스트에 걸어 둔 =ISNUMBER(SEARCH("이준",D2)) 같은 수식은 목록으로 바꾼 뒤 #분산!(SPILL) 오류가 났습니다(이 PC에서 확인). 목록으로 바꾸기 전에 그 칸을 참조하는 수식이 있는지 먼저 찾아 둡니다.
1차시 · 기초 2
HAS로 담당 프로젝트를 표시하고 합계 내기
"이준 씨가 맡은 프로젝트가 몇 건이고 예산이 얼마인지" 보고해야 합니다. 필터로 눈으로 세면 다음 달에 또 세야 합니다.
이렇게 하세요
HAS로 TRUE/FALSE 열을 하나 만들고, 그 열로 세고 더합니다.HAS(어디서, 무엇을)은 목록 안에 그 값이 있으면 TRUE를 돌려줍니다.
해 보기
표 오른쪽에 "이준_담당" 열을 만들고 HAS를 넣습니다.
H1에 이준_담당을 입력하고 Enter를 누르면 표가 한 칸 넓어집니다. H2에 아래 수식을 넣습니다.
=HAS([@담당자],"이준")

표 전체에 수식이 자동으로 채워지고, P01, P08, P12만 TRUE입니다.
담당자 수를 세고, 건수와 예산을 냅니다.
I1에 담당자수를 입력하고 I2에 COUNTA를 넣습니다. 표 아래 A15:A17에 제목을 적고 D15:D17에 수식을 넣습니다.
=COUNTA([@담당자])
=COUNTIF(프로젝트[이준_담당],TRUE)
=SUMIFS(프로젝트[예산_만원],프로젝트[이준_담당],TRUE)
=SUM(프로젝트[담당자수])

담당자수는 줄마다 2, 2, 1, 3…으로 나오고, 이준 담당 건수 3, 이준 담당 예산 8,100, 전체 담당 인원 23이면 통과입니다.
왜 그럴까
HAS는 항목 전체가 같아야 TRUE입니다. "이준"으로 찾으면 "이준호"는 걸리지 않고, "이"만 넣으면 아무것도 걸리지 않습니다. 반대로 대소문자는 가리지 않아서 HAS(목록,"excel")도 "Excel"을 찾습니다.
예전 방식과 나란히 놓으면 차이가 숫자로 보입니다. 같은 표에서 이 PC로 재 본 값입니다.
| 방법 | 수식 | 건수 | 예산(만원) |
|---|---|---|---|
| 예전 방식(글자 일부 검색) | =SUMIFS(프로젝트[예산_만원],프로젝트[담당자],"*이준*") | 6 | 13,050 |
| 목록 + HAS | =SUMIFS(프로젝트[예산_만원],프로젝트[이준_담당],TRUE) | 3 | 8,100 |
예전 방식은 "이준호" 씨 프로젝트 세 건(4,950만원)을 이준 씨 몫으로 더했습니다. 보고서에 그대로 나갔으면 예산이 60퍼센트 넘게 부풀었을 숫자입니다.
COUNTA는 셀 개수가 아니라 목록 안의 항목 수를 셉니다. 담당자 셀 하나에 세 명이 있으면 3입니다.
이런 방법도 있습니다
- 도움 열 없이 한 번에 거르고 싶으면 FILTER 안에 MAP으로 HAS를 돌립니다:
=FILTER(프로젝트[프로젝트ID],MAP(프로젝트[담당자],LAMBDA(x,HAS(x,"이준")))) - 찾을 사람을 셀에 두면(예: K1에 이준)
=HAS([@담당자],$K$1)로 바꿔 가며 볼 수 있습니다. 복사 전에 F4로 고정합니다. - 목록으로 바꾸기 전 쉼표 텍스트 상태에서도 TEXTSPLIT으로 쪼개 넘기면 HAS가 정확히 찾습니다:
=HAS(TEXTSPLIT(D2,", "),"이준") - HAS가 없는 일반 365에서는 쪼갠 값을 하나씩 비교해 OR로 묶습니다. "이준호" 줄은 FALSE, "이준" 줄은 TRUE로 정확합니다(이 PC에서 확인):
=OR(TEXTSPLIT(D2,", ")="이준")
2.5막혔을 때
눌러서 펼치기
| 보이는 것 | 원인 | 하는 일 |
|---|---|---|
| 목록으로 바꾸기 전 셀에 HAS를 썼더니 FALSE | 쉼표 텍스트는 글자 하나라 "이준, 박서연"과 "이준"이 다름 | 기초 1 Step 2로 목록부터 만듭니다 |
숫자 목록에서 HAS(목록,"1")이 FALSE | 숫자 1과 글자 "1"은 다른 값 | 따옴표 없이 HAS(목록,1)로 씁니다 |
| H2에 수식을 넣었는데 아래로 안 채워짐 | 표 밖에 입력함 | H1 제목을 먼저 넣어 표를 넓힌 뒤 H2에 입력합니다 |
1차시 · 중급 1
HASANY와 HASALL로 조건 여러 개를 한 번에 보기
주말 근무자를 짜야 합니다. 토요일이나 일요일 중 하루라도 나올 수 있는 사람, 그리고 데이터 분석 과제에 ADsP와 SQLD 자격을 둘 다 가진 사람을 골라야 합니다.
이렇게 하세요
"하나라도"는 HASANY, "모두"는 HASALL입니다.
찾을 값 여러 개는 중괄호 배열 {"토","일"}로 한 번에 넘깁니다.
해 보기
직원 시트의 자격증과 근무가능요일을 목록으로 바꿉니다.
C2부터 D16까지 끌어서 고르고 Ctrl+J를 누릅니다.
E열 "주말가능", F열 "데이터자격"을 만듭니다.
E1에 주말가능, F1에 데이터자격을 입력하고 각 2행에 수식을 넣습니다.
=HASANY([@근무가능요일],{"토","일"})
=HASALL([@자격증],{"ADsP","SQLD"})

주말가능 TRUE는 이준호, 김민지, 강도윤, 오세린, 조은우 5명, 데이터자격 TRUE는 이준호, 강도윤, 한지훈 3명이면 통과입니다.
왜 그럴까
세 함수는 묻는 말이 다릅니다.
| 함수 | 묻는 말 | 이 표에서 |
|---|---|---|
| HAS | 이 값이 있나 | 이준이 담당자에 있나 |
| HASANY | 이 중 하나라도 있나 | 토, 일 중 하루라도 되나(5명) |
| HASALL | 이게 전부 있나 | ADsP와 SQLD를 둘 다 가졌나(3명) |
예전에는 OR(ISNUMBER(SEARCH("토",D2)),ISNUMBER(SEARCH("일",D2)))처럼 값마다 SEARCH를 겹쳐 썼습니다. 값이 늘수록 수식이 길어지고, "일"이 다른 단어 안에 섞이면 잘못 잡습니다. HASANY와 HASALL은 찾을 값 목록만 바꾸면 됩니다.
3.4이런 일에 씁니다
- 교육 이수 관리: 직원별 이수 과정 목록에서 필수 과정을 모두 들었는지(HASALL)
- 품질 점검: 제품별 불량 유형 목록에 중대 불량 코드가 하나라도 있는지(HASANY)
- 고객 관리: 고객별 관심 태그 목록에서 이번 캠페인 대상 태그가 있는지(HAS)
- 찾을 값을 표나 목록 셀로 두면 기준이 바뀔 때 수식을 건드리지 않습니다. 예: K1 셀에 "토, 일"을 목록으로 만들어 두고
=HASANY([@근무가능요일],$K$1)
기억할 한 줄
쉼표로 이어 쓴 칸은 목록으로 바꾸고, 찾을 때는 HAS 하나, 하나라도는 HASANY, 모두는 HASALL로 묻습니다.
묶고 펼치기, FLATTEN과 셀 안 배열
1차시에는 목록 안을 들여다봤다면, 2차시에는 목록을 펼치고 다시 묶습니다.
설문 복수 응답을 항목별로 세고, 거래처마다 산 품목을 셀 하나에 모읍니다.
2차시 · 기초 3
Forms 복수 응답을 펼쳐 빈도표 만들기
사내 설문에서 "도움이 필요한 업무를 모두 고르세요"라는 복수 선택 문항을 받았습니다. Forms에서 내려받은 엑셀에는 한 칸에 "보고서 작성;데이터 정리;메일 작성"처럼 세미콜론으로 이어져 있습니다. 업무별로 몇 명이 골랐는지 세야 합니다.
이렇게 하세요
세미콜론을 쉼표로 바꿔 목록으로 만들고, FLATTEN으로 펼쳐 GROUPBY로 셉니다.
수식 한 줄로 업무별 선택 수와 합계가 나옵니다.
해 보기
세미콜론을 쉼표로 바꾸고 목록으로 만듭니다.
설문 시트의 C2를 누르고 Ctrl+Shift+↓로 C31까지 고릅니다. Ctrl+H를 눌러 찾을 내용에 ;, 바꿀 내용에 , (쉼표와 띄어쓰기 한 칸)을 넣고 "모두 바꾸기"를 누릅니다. 창을 닫고 선택이 남은 상태에서 Ctrl+J를 누릅니다.
E1에 제목, E2에 빈도표 수식을 넣습니다.
표와 한 칸 띄운 E열에 넣습니다. 표 바로 옆 D열에 쓰면 표가 넓어져 수식이 표 안으로 들어갑니다.
=GROUPBY(FLATTEN(설문[도움이_필요한_업무]),FLATTEN(설문[도움이_필요한_업무]),COUNTA,,,-2)

데이터 정리·보고서 작성·수식 작성 각 16, 메일 작성 9, 회의록 정리 5, 번역·차트 만들기 각 3, 합계 68이면 통과입니다.
왜 그럴까
응답 30건에 업무가 68번 골라졌습니다. 목록 열을 그대로 GROUPBY에 넣으면 셀 30개를 묶을 뿐이라 업무별로 셀 수 없습니다. FLATTEN이 셀 안의 업무를 꺼내 68줄짜리 한 열로 펼쳐 주면, 그때부터 GROUPBY, UNIQUE, COUNTIF 같은 기존 함수가 그대로 붙습니다.
GROUPBY의 마지막 인수 -2는 두 번째 열(개수)을 큰 순서로 정렬하라는 뜻입니다. 같은 수는 업무 이름 순서로 나옵니다.
| 하고 싶은 일 | 수식 | 이 데이터에서 |
|---|---|---|
| 전체 선택 수 | =COUNTA(FLATTEN(설문[도움이_필요한_업무])) | 68 |
| 고유 업무 목록(가나다순) | =SORT(UNIQUE(FLATTEN(설문[도움이_필요한_업무]))) | 7개 |
| 업무별 선택 수 | =GROUPBY(FLATTEN(...),FLATTEN(...),COUNTA,,,-2) | 위 표 |
이런 방법도 있습니다
- 목록 기능이 없는 일반 365에서는 세미콜론 텍스트를 TEXTJOIN으로 이어 붙인 뒤 TEXTSPLIT으로 다시 쪼갭니다. 이 PC에서 바꾸기 전 원본으로 돌린 결과가 위 표와 같았습니다(합계 68).
=GROUPBY(TEXTSPLIT(TEXTJOIN(";",,설문[도움이_필요한_업무]),,";"),TEXTSPLIT(TEXTJOIN(";",,설문[도움이_필요한_업무]),,";"),COUNTA,,,-2)
- 이 방법은 TEXTJOIN 결과가 셀 한도(32,767자)를 넘으면 깨집니다. 응답이 수천 건이면 FLATTEN 쪽이 안전합니다.
- 차트, 피벗 테이블, Power Query는 아직 목록 값을 읽지 못합니다. 빈도표를 차트로 그리려면 위처럼 FLATTEN과 GROUPBY로 일반 셀에 펼친 결과를 원본으로 씁니다.
FLATTEN의 빈자리
행마다 길이가 다른 배열을 펼치면 짧은 행의 빈자리가 #N/A로 채워집니다. 이 PC에서 =COUNTA(FLATTEN(TEXTSPLIT({"a,b";"c,d,e"},",")))는 항목이 5개인데 6을 냈습니다. 두 번째 인수에 ""를 넣어 FLATTEN(배열,"")로 쓰면 빈칸으로 채워집니다. 목록 열을 펼칠 때는 항목이 한 열로 쌓여 이 문제가 없었습니다.
2차시 · 중급 2
거래처별 품목을 한 셀에 모으기
주문 내역이 한 줄에 한 품목씩 18줄 있습니다. 거래처별로 "무엇을 사 갔는지"를 한 줄 요약으로 보고 싶은데, FILTER를 쓰면 결과가 아래로 쏟아져 다음 거래처 칸과 부딪힙니다.
이렇게 하세요
FILTER 수식 전체를 중괄호 { }로 한 번 더 감싸면 결과가 셀 하나에 담깁니다.
이렇게 담긴 값은 목록처럼 COUNTA와 HAS로 다시 계산할 수 있습니다.
해 보기
거래처 목록을 펼칩니다.
주문 시트 F1에 거래처, F2에 아래 수식을 넣습니다.
=UNIQUE(주문[거래처])
F2:F5에 대성기계, 한빛전자, 미래산업, 동방유통이 나옵니다.
G2:G5를 끌어서 고르고 셀 안 배열 수식을 한 번에 넣습니다.
G1에 품목목록을 입력합니다. G2부터 G5까지 고른 뒤 아래 수식을 치고 Ctrl+Enter를 누르면 네 칸에 한꺼번에 들어갑니다. 등호 바로 뒤의 {와 맨 끝의 }는 직접 칩니다.
={SORT(UNIQUE(FILTER(주문[품목],주문[거래처]=F2)))}
품목 수와 베어링 구매 여부를 붙입니다.
H1에 품목수, I1에 베어링을 입력하고 같은 방법으로 H2:H5, I2:I5에 넣습니다.
=COUNTA(G2)
=HAS(G2,"베어링")

품목목록이 대성기계 "기어, 너트, 베어링, 볼트", 한빛전자 "너트, 베어링, 볼트, 스프링", 미래산업 "기어, 너트, 볼트, 스프링", 동방유통 "기어, 너트, 볼트"이고, 품목수가 4, 4, 4, 3, 베어링이 대성기계와 한빛전자만 TRUE면 통과입니다.
왜 그럴까
중괄호 없이 같은 수식을 넣으면 결과가 아래로 펼쳐지려다 바로 밑 칸 수식과 부딪혀 #분산! 오류가 납니다(이 PC에서 G2 자리에 넣어 확인). 그동안은 TEXTJOIN(", ",,…)으로 결과를 글자 하나로 이어 붙여 피했는데, 그렇게 만든 "기어, 너트, 베어링, 볼트"는 글자일 뿐이라 HAS(…,"베어링")이 FALSE를 냈습니다.
중괄호로 감싼 결과는 TYPE이 64인 배열입니다. 보기에는 TEXTJOIN과 같아도 COUNTA는 품목을 하나씩 세고, HAS는 정확히 찾습니다. 표 안에서 FILTER를 쓸 때 #분산!을 피하려고 결과를 글자로 뭉개던 일이 사라집니다.
| 방법 | 셀에 보이는 것 | COUNTA | HAS(…,"베어링") |
|---|---|---|---|
=TEXTJOIN(", ",,SORT(UNIQUE(FILTER(…)))) | 기어, 너트, 베어링, 볼트 | 1 | FALSE |
={SORT(UNIQUE(FILTER(…)))} | 기어, 너트, 베어링, 볼트 | 4 | TRUE |
5.4이런 일에 씁니다
- 고객별 최근 구매 품목, 직원별 담당 거래처, 프로젝트별 참여 부서처럼 "한 줄에 여럿"을 요약하는 표
- 요약한 셀을 다시 HAS로 묻는 2단 분석: "베어링을 산 적 있는 거래처", "필수 부서가 빠진 프로젝트"
- 여러 열짜리 결과도 담깁니다. 한 셀에 넣은 배열에서 원하는 열만 꺼내 계산할 수 있습니다:
=SUM(CHOOSECOLS(셀,2))
셀 안 배열도 아직 받지 못하는 곳이 있습니다
조건부 서식은 배열 안을 보지 않고(수식을 쓰면 가능), 데이터 유효성 드롭다운 목록으로 쓸 수 없고, 차트는 배열을 데이터 점으로 펼치지 못합니다. 찾기 및 바꾸기도 목록 항목을 바꾸지 못합니다. 보고용 표는 FLATTEN으로 일반 셀에 펼쳐서 넘깁니다.
기억할 한 줄
묶인 값은 FLATTEN으로 펼쳐 세고, 펼쳐지는 결과는 중괄호로 감싸 한 셀에 묶습니다.
파일 불러오기, IMPORTCSV와 IMPORTTEXT
매일 아침 시스템에서 CSV를 내려받아 열고, 복사해서, 보고서 시트에 붙이는 일이 있습니다.
3차시에는 그 복사·붙이기를 수식 한 줄로 바꾸고, 한글 깨짐과 다른 구분자, 새로 고침까지 처리합니다.
3차시 · 기초 4
매일 받는 CSV를 수식 하나로 불러오기
지점 매출 CSV가 매일 같은 폴더에 같은 모양으로 떨어집니다. 맨 아래에는 시스템이 붙인 합계 줄이 있어서, 붙여 넣은 뒤 매번 지우고 합계를 다시 냅니다.
이렇게 하세요
IMPORTCSV에 파일 경로를 주면 표가 그대로 펼쳐집니다. 두 번째 자리(건너뛸 행)에 -1을 넣으면 끝의 합계 줄이 빠집니다.
경로는 수식에 박지 않고 설정 시트 B1 칸을 이어 붙여 씁니다.
해 보기
시작 전에
- C:\엑셀실습 폴더에 CSV 두 개와 TXT 한 개가 있다(오늘의 순서와 준비 Step 2)
- 설정 시트 B1에
C:\엑셀실습\이 적혀 있다. 다른 폴더에 두었다면 그 경로로 고치고 끝에\를 붙인다
새 시트에서 IMPORTCSV를 넣습니다.
시트를 하나 추가해 이름을 불러오기로 바꾸고 A1에 아래 수식을 넣습니다.
=IMPORTCSV(설정!B1&"일일매출_2026-10-07.csv")
잠깐 #BUSY!가 떴다가 헤더와 매출 12줄, 맨 아래 "합계" 줄까지 14줄이 펼쳐집니다.
합계 줄을 빼고 금액 합계를 냅니다.
A1을 고르고 F2로 수식을 열어 닫는 괄호 앞에 ,-1을 붙입니다. M1에 금액 합계, M2에 SUM 수식을 넣습니다. A1#은 A1에서 펼쳐진 결과 전체를 가리킵니다.
=IMPORTCSV(설정!B1&"일일매출_2026-10-07.csv",-1)
=SUM(CHOOSECOLS(A1#,5))

합계 줄이 사라지고 13줄(헤더 1 + 매출 12)이 남으며, M2가 6117000이면 통과입니다.
왜 그럴까
복사·붙이기는 그 순간의 값을 옮겨 놓을 뿐이라, 내일 파일이 오면 같은 일을 다시 합니다. IMPORTCSV는 "어느 파일을 어떻게 읽을지"를 수식으로 남기기 때문에 파일만 바꿔 끼우면 결과가 따라옵니다. 결과가 동적 배열이라 FILTER, SORT, GROUPBY에 바로 넣을 수 있습니다.
건너뛸 행과 가져올 행에 음수를 넣으면 끝에서부터 셉니다. 이 PC에서 확인한 동작입니다.
| 수식 끝부분 | 결과 |
|---|---|
(경로) | 전부(헤더 + 매출 12 + 합계) |
(경로,-1) | 끝 1줄(합계)을 건너뜀 |
(경로,1,2) | 앞 1줄(헤더)을 건너뛴 뒤 2줄만. 건너뛰기를 먼저 하고 가져오기를 나중에 합니다 |
(경로,,-1) | 끝 1줄(합계)만 가져옴 |
날짜는 글자가 아니라 진짜 날짜 값으로, 수량과 금액은 숫자로 들어옵니다. 지역 형식은 운영체제 설정을 따르고 네 번째 자리(로캘)로 바꿀 수 있습니다.
6.4막혔을 때
눌러서 펼치기
| 보이는 것 | 원인 | 하는 일 |
|---|---|---|
#VALUE! | 경로에 파일 이름만 적음(이 PC에서 =IMPORTCSV("파일.csv")는 #VALUE!) | 폴더까지 들어간 전체 경로를 씁니다. 설정!B1 끝에 \가 있는지 봅니다 |
#BUSY!가 오래감 | 파일을 읽는 중 | 몇 초 기다립니다. 계속되면 파일이 다른 프로그램에 열려 있는지 봅니다 |
#BLOCKED! | 저장한 파일을 다시 열면 보안상 막힘 | 고급 1 Step 3을 봅니다 |
3차시 · 중급 3
한글이 깨진 CSV는 IMPORTTEXT의 인코딩 949로 읽기
오래된 사내 시스템에서 받은 CSV를 같은 방법으로 불러왔더니 지점과 품목이 ����로 깨집니다. 메모장으로 열면 멀쩡해 보입니다.
이렇게 하세요
IMPORTCSV 대신 IMPORTTEXT를 쓰고 다섯 번째 자리(인코딩)에 949를 넣습니다.
949는 한글 Windows의 기본 인코딩(CP949, EUC-KR 계열) 번호입니다.
해 보기
깨지는 모습을 먼저 봅니다.
불러오기 시트 A16에 구 시스템 파일을 IMPORTCSV로 불러옵니다.
=IMPORTCSV(설정!B1&"일일매출_구시스템_2026-10-07.csv")
옆 G16에 IMPORTTEXT로 다시 불러옵니다.
구분자는 쉼표, 건너뛸 행은 -1(합계 줄), 가져올 행은 비우고, 인코딩에 949를 넣습니다.
=IMPORTTEXT(설정!B1&"일일매출_구시스템_2026-10-07.csv",",",-1,,949)

왼쪽 A16 블록은 한글이 깨지고, 오른쪽 G16 블록에 일자·지점·품목·수량·금액과 매출 12줄이 바로 보이면 통과입니다.
왜 그럴까
IMPORTCSV는 인코딩을 UTF-8로 고정한 줄임판이라 인코딩을 바꿀 자리가 없습니다. 한글 Windows 엑셀에서 "CSV(쉼표로 분리)"로 저장한 파일이나 오래된 시스템이 내보낸 파일은 대개 CP949라서, UTF-8로 읽으면 한글만 깨지고 숫자는 멀쩡합니다. 화면에서 수량과 금액이 제대로 보였던 이유입니다.
인코딩 자리에는 이름이 아니라 코드 페이지 번호를 넣습니다. 이 PC에서 "euc-kr"을 넣으면 #VALUE!, 949를 넣으면 정상이었습니다. 수식을 칠 때 뜨는 인수 안내는 IMPORTTEXT(경로, [구분_기호], [건너뛸_행], [가져올_행], [인코딩], [로캘]) 순서입니다.
이런 방법도 있습니다
- 구분자가 쉼표가 아닌 파일은 두 번째 자리에 넣습니다. 탭은 비워 두면 기본값이고, 특수 문자는
CHAR(코드)로 넣습니다. - 칸이 글자 수로 나뉜 고정폭 파일은 두 번째 자리에 열이 시작하는 위치를 배열로 줍니다. Microsoft 예시:
=IMPORTTEXT("C:\Data\fixedwidth.txt",{1,3}) - 원본 시스템에서 내보내기 형식을 "CSV UTF-8"로 바꿀 수 있다면 IMPORTCSV 한 줄로 끝납니다.
3차시 · 고급 1
구분자가 다른 TXT를 불러오고 새로 고치기
창고 시스템 재고 파일은 맨 위에 "창고 재고 현황 보고", "출력일 …" 안내 두 줄이 붙어 있고, 칸이 |로 나뉜 TXT입니다. 하루에도 몇 번씩 새 숫자로 덮어써집니다.
이렇게 하세요
IMPORTTEXT에 구분자 "|"와 건너뛸 행 2를 주고, 원본이 바뀌면 데이터 > 모두 새로 고침을 누릅니다.
불러오기 함수는 원본이 바뀌어도 저절로 다시 읽지 않습니다.
해 보기
재고 파일을 불러옵니다.
불러오기 시트 M5에 넣습니다.
=IMPORTTEXT(설정!B1&"재고현황_창고.txt","|",2)
품번·품명·현재고·안전재고 헤더와 8개 품목이 펼쳐지고, B-202 현재고는 380입니다.
원본 파일이 바뀌면 모두 새로 고칩니다.
메모장으로 재고현황_창고.txt를 열어 B-202 줄의 380을 620으로 고치고 저장합니다. 엑셀로 돌아와 데이터 탭 > 모두 새로 고침을 누릅니다.

새로 고침 뒤 B-202 현재고가 620으로 바뀌면 통과입니다. 실습이 끝나면 620을 380으로 되돌려 둡니다.
파일을 다시 열면 "콘텐츠 사용"을 누릅니다.
통합 문서를 저장하고 닫았다가 다시 열면 수식 입력줄 위에 보안 경고가 뜨고, 불러오기 칸은 모두 #BLOCKED!가 됩니다.

"콘텐츠 사용"을 누르면 다시 읽어 옵니다.

#BLOCKED!가 사라지고 매출, 구 시스템 매출, 재고 블록이 모두 다시 보이면 통과입니다.
왜 그럴까
IMPORT 함수는 수식이 내 컴퓨터의 파일이나 웹 주소를 읽어 오는 기능입니다. 남이 보낸 통합 문서가 열리자마자 내 폴더의 파일을 읽어 가면 곤란하니, 열 때마다 허락을 받는 장치로 보입니다. 직접 만든 파일이 아니면 수식 속 경로부터 확인하고 누릅니다.
새로 고침도 자동이 아니어서, 바뀐 숫자가 보고서에 들어가는 시점을 사람이 정합니다. 보고서를 보내기 전에 모두 새로 고침을 누르는 습관을 들입니다.
8.4이런 일에 씁니다
- 재고 부족 품목만 거르기: 불러온 결과에서 헤더를 떼고 현재고가 안전재고보다 적은 품번을 고릅니다. 이 데이터에서는 B-202, C-301이 나옵니다.
=LET(d,DROP(M5#,1),FILTER(CHOOSECOLS(d,1),CHOOSECOLS(d,3)<CHOOSECOLS(d,4)))
- 웹에 있는 CSV: 경로 자리에 URL을 넣습니다. 로그인이 필요하면 익명, Windows, 기본(아이디·비밀번호), Web API(API 키), 조직 계정 중 하나를 고르는 창이 뜹니다. 준 권한은 데이터 > 데이터 가져오기 > 데이터 원본 설정에서 지웁니다.
- 언제 Power Query를 쓰나: 파일 하나를 모양 그대로 읽어 계산에 넣을 때는 IMPORT 함수, 여러 파일 합치기·열 형식 바꾸기·병합처럼 정리 단계가 여러 개일 때는 Power Query가 맞습니다. Microsoft도 단순한 가져오기에 Power Query 화면이 무겁다는 의견을 받아 이 함수를 만들었다고 밝혔습니다.
기억할 한 줄
파일은 복사하지 말고 IMPORT 함수로 불러오며, 한글이 깨지면 IMPORTTEXT에 949, 원본이 바뀌면 모두 새로 고침입니다.
정리, 언제 쓰고 무엇이 바뀌나
세 차시 동안 만든 것을 내 업무에 옮기기 전에 두 가지를 정리합니다.
아직 미리 보기인 기능을 어디까지 믿어도 되는지, 그리고 이 기능들이 엑셀 표를 만드는 방식을 어떻게 바꾸는지입니다.
마무리 · 도입 판단
지금 써도 되는지 판단하기
오늘 배운 HAS와 IMPORTCSV로 팀 주간 보고 파일을 바꾸고 싶습니다. 그런데 팀원 절반은 이 함수가 없는 엑셀을 씁니다.
이렇게 하세요
미리 보기 기능은 내 파일에서 먼저 쓰고, 팀이 함께 여는 파일에는 정식 출시 뒤에 넣습니다.
급하면 결과를 값으로 붙여 넣은 사본을 공유합니다.
해 보기
업무 파일에 넣기 전 확인눌러서 체크
왜 그럴까
실제로 미리 보기 단계에서 사라진 함수가 있습니다. 셀에서 AI에게 물어 답을 받던 COPILOT 함수는 2025년 8월 Insider 베타로 나와 요약·분류·표 생성에 쓰였는데, 2026년 9월 14일부로 엑셀에서 빠졌습니다. Microsoft 안내에 따르면 이미 계산된 결과는 값으로 남지만, 그 셀이 다시 계산되는 순간 #NAME? 오류가 납니다. 같은 일은 Copilot 창에 말로 부탁하는 방식으로 옮겨 갔습니다.
이 함수를 정기 보고서에 걸어 둔 사람은 어느 날 파일을 열었다가 오류를 만났을 것입니다. 목록과 셀 안 배열, IMPORT 함수도 Microsoft가 베타 단계에서 멈추거나 바꾸거나 뺄 수 있다고 밝힌 기능입니다. 미리 보기 기능은 배우고 시험하는 데 쓰고, 남이 기대는 파일에는 정식 출시를 확인한 뒤 넣습니다.
출처: COPILOT Function, Microsoft Support
이런 방법도 있습니다
- COPILOT 함수를 썼던 파일이 있다면, 다시 계산되기 전에 찾기(
Ctrl+F, 찾는 위치: 수식)로COPILOT(를 찾아 그 셀을 값으로 붙여 넣어 둡니다. - 팀원이 새 함수가 없는 엑셀을 쓴다면, 오늘 각 장의 "이런 방법도 있습니다"에 적은 예전 방식으로 같은 결과를 만들 수 있습니다. TEXTSPLIT으로 쪼개 비교하는
=OR(TEXTSPLIT(D2,", ")="이준")과 TEXTJOIN·TEXTSPLIT 빈도표는 결과가 정확합니다. 텍스트 필터의 "포함"과"*이준*"같은 글자 일부 검색만 "이준호"를 함께 잡으니, 그 두 가지를 쓸 때는 결과를 한 번 더 봅니다.
마무리 · 시사점
표를 설계하는 방식이 바뀝니다
새 프로젝트 관리표를 만듭니다. 담당자를 한 칸에 여럿 적을지, 담당자마다 한 줄씩 나눌지 고민입니다.
이렇게 하세요
값마다 따로 붙는 숫자가 없으면 목록으로 한 칸에, 값마다 수량·금액·날짜가 붙으면 행으로 나눕니다.
왜 그럴까
그동안 엑셀에서는 "한 칸에 한 값"이 정답이었습니다. 담당자가 셋이면 행을 셋으로 나누거나, 쉼표로 이어 쓰고 SEARCH로 버텼습니다. 목록이 생기면서 세 번째 길이 열렸습니다. 다만 모든 경우에 목록이 낫지는 않습니다.
| 이런 데이터 | 목록(한 칸에 여럿) | 행으로 나누기 |
|---|---|---|
| 프로젝트 담당자, 직원 자격증, 고객 관심 태그 | 맞음. 사람이 읽기 쉽고 HAS로 거름 | 행이 불어나 읽기 어려움 |
| 주문 품목마다 수량과 금액이 있음 | 품목과 수량이 따로 놀아 계산이 꼬임 | 맞음. 오늘 주문 시트도 한 줄에 한 품목 |
| 설문 복수 응답 | 맞음. 응답 한 줄 그대로 두고 FLATTEN으로 셈 | 응답자 수가 흐려짐 |
| 피벗 테이블, Power Query, 다른 시스템으로 넘김 | 아직 못 읽음 | 맞음. FLATTEN으로 펼쳐서 넘김 |
2차시 중급 2가 두 방식을 오가는 예였습니다. 원본 주문은 한 줄에 한 품목으로 두고, 보고용 요약에서만 거래처별 품목을 한 셀에 묶었습니다. 원본은 행으로, 요약은 목록으로 두면 두 장점을 다 씁니다.
10.3이런 일에 씁니다
아래는 오늘 실습을 하며 정리한 해석입니다.
- 글자로 뭉개는 습관이 줄어듭니다. 표 안에서 FILTER 결과가
#분산!을 낼 때 TEXTJOIN으로 이어 붙이던 우회가 필요 없어집니다. 보기는 같아도 계산할 수 있는 값으로 남습니다. - 보고서 파일이 데이터를 직접 가져옵니다. 매일 받는 CSV를 붙이던 손이 IMPORT 수식 한 줄로 바뀌면, 보고서 파일은 계산과 수집을 함께 하는 작은 파이프라인이 됩니다. 정리 단계가 여러 개면 여전히 Power Query가 맞고, 이 둘을 구분하는 눈이 필요합니다.
- AI에게 맡길 때도 구조를 말할 수 있어야 합니다. 같은 시기에 COPILOT 함수는 빠지고 Copilot 창이 엑셀을 직접 고치는 쪽으로 커졌습니다. AI가 수식을 대신 써 줄수록 "담당자 칸을 목록으로 바꾸고 HAS로 이준만 거르자"처럼 데이터 모양을 정해 주는 사람의 몫이 커집니다.
마무리 · 정리
한 장 정리
오늘 만든 것을 상황별로 한 표에 모았습니다. 내 업무에 옮길 때 왼쪽 칸에서 내 상황을 찾습니다.
| 이럴 때 | 이렇게 | 왜 |
|---|---|---|
| 한 칸에 이름·태그가 쉼표로 여럿 | 범위를 고르고 Ctrl+J(삽입 > 목록) | 필터와 계산이 항목 단위로 됨 |
| 목록에 특정 값이 있는지 | =HAS(목록,"값") | 항목 전체가 같을 때만 TRUE. "이준"이 "이준호"를 안 잡음 |
| 여러 값 중 하나라도 / 모두 | HASANY(목록,{"a","b"}) / HASALL(...) | 값 목록만 바꾸면 됨 |
| 목록 안 항목 수 | =COUNTA(목록) | 셀이 아니라 항목을 셈 |
| 복수 응답을 항목별로 세기 | =GROUPBY(FLATTEN(열),FLATTEN(열),COUNTA,,,-2) | FLATTEN이 항목을 한 열로 펼침 |
FILTER 결과가 표 안에서 #분산! | 수식을 ={...}로 감쌈(호환성 버전 3) | 결과가 한 셀에 배열로 담기고 계산 가능 |
| 매일 받는 CSV 붙이기 | =IMPORTCSV(경로,-1) | 파일만 바꾸면 결과가 따라옴. -1은 끝 합계 줄 빼기 |
| CSV 한글이 깨짐 | =IMPORTTEXT(경로,",",-1,,949) | IMPORTCSV는 UTF-8 고정. 949는 한글 Windows 인코딩 |
| 파이프 구분 TXT, 앞에 안내 줄 | =IMPORTTEXT(경로,CHAR(124),2) | CHAR(124)는 파이프 문자. 구분자와 건너뛸 줄을 지정 |
| 원본 파일이 바뀜 | 데이터 > 모두 새로 고침 | 자동으로 다시 읽지 않음 |
다시 연 파일이 #BLOCKED! | 보안 경고의 "콘텐츠 사용" | 파일을 읽어도 되는지 허락을 받음 |
| 팀 공유 파일에 넣을지 | 정식 출시 전에는 값 사본으로 공유 | 미리 보기 기능은 바뀌거나 빠질 수 있음(COPILOT 함수) |
기억할 한 줄
새 기능은 내 파일에서 먼저 익히고, 원본은 행으로 요약은 목록으로 두며, 남이 기대는 파일에는 정식 출시 뒤에 넣습니다.
오늘 쓴 수식 한곳에
본문에 나온 수식을 차시별로 모았습니다. 내 업무에 옮길 때는 표 이름과 열 이름, 경로만 바꿉니다.
수식 모음
차시별 수식 모음
번호는 본문의 수식 번호와 같습니다. 오른쪽 위 복사 버튼으로 가져갑니다.
11차시
=HAS([@담당자],"이준")
=COUNTA([@담당자])
=COUNTIF(프로젝트[이준_담당],TRUE)
=SUMIFS(프로젝트[예산_만원],프로젝트[이준_담당],TRUE)
=SUM(프로젝트[담당자수])
=HASANY([@근무가능요일],{"토","일"})
=HASALL([@자격증],{"ADsP","SQLD"})
22차시
=GROUPBY(FLATTEN(설문[도움이_필요한_업무]),FLATTEN(설문[도움이_필요한_업무]),COUNTA,,,-2)
=GROUPBY(TEXTSPLIT(TEXTJOIN(";",,설문[도움이_필요한_업무]),,";"),TEXTSPLIT(TEXTJOIN(";",,설문[도움이_필요한_업무]),,";"),COUNTA,,,-2)
=UNIQUE(주문[거래처])
={SORT(UNIQUE(FILTER(주문[품목],주문[거래처]=F2)))}
=COUNTA(G2)
=HAS(G2,"베어링")
33차시
=IMPORTCSV(설정!B1&"일일매출_2026-10-07.csv")
=IMPORTCSV(설정!B1&"일일매출_2026-10-07.csv",-1)
=SUM(CHOOSECOLS(A1#,5))
=IMPORTCSV(설정!B1&"일일매출_구시스템_2026-10-07.csv")
=IMPORTTEXT(설정!B1&"일일매출_구시스템_2026-10-07.csv",",",-1,,949)
=IMPORTTEXT(설정!B1&"재고현황_창고.txt","|",2)
=LET(d,DROP(M5#,1),FILTER(CHOOSECOLS(d,1),CHOOSECOLS(d,3)<CHOOSECOLS(d,4)))
한 장 요약
차시별로 기억할 한 문장
- 1차시 쉼표로 이어 쓴 칸은 목록으로 바꾸고, 찾을 때는 HAS 하나, 하나라도는 HASANY, 모두는 HASALL로 묻습니다.
- 2차시 묶인 값은 FLATTEN으로 펼쳐 세고, 펼쳐지는 결과는 중괄호로 감싸 한 셀에 묶습니다.
- 3차시 파일은 복사하지 말고 IMPORT 함수로 불러오며, 한글이 깨지면 IMPORTTEXT에 949, 원본이 바뀌면 모두 새로 고침입니다.
- 마무리 새 기능은 내 파일에서 먼저 익히고, 원본은 행으로 요약은 목록으로 두며, 남이 기대는 파일에는 정식 출시 뒤에 넣습니다.
근거: Microsoft Excel Blog·Microsoft 365 Insider Blog·Microsoft Support 함수 문서(2026-01~09). 화면과 숫자는 Windows용 Microsoft 365 베타 채널(빌드 20601)에서 실제로 돌려 확인했습니다. 기능은 정식 출시 전 바뀔 수 있습니다.