[257회 라이브 공지] 이번 주 라이브는 `3/4(수) 오후 8시` 에 진행합니다! 오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴
엑셀 IMPORTHTML 함수 추가기능 (웹 크롤링 함수)
특정 웹 페이지의 테이블 또는 목록으로 작성된 자료를 추출하는 엑셀 추가기능 함수입니다. (실시간 배열 출력, 클래스 지정 가능)
파일 다운로드 ( 무료 )
30 EP0 EP 특별 할인 중!
2,740 명 이상의 회원이 다운로드 받았어요! ( 62개의 리뷰)
엑셀 IMPORTHTML 함수 추가기능 (웹 크롤링 함수) 썸네일
엑셀-웹-크롤링-함수
크롤링 음악 순위 가져오기 IMPORTHTML 함수
추가기능 이용 가이드
추가기능 상세 정보
특정 웹 페이지의 테이블 또는 목록으로 작성된 자료를 추출하는 엑셀 추가기능 함수입니다. (실시간 배열 출력, 클래스 지정 가능)
파일이름
DuTool - ImportHTML 함수.xlam
지원 버전
윈도우 : 오피스 2010 버전 이상
Mac : 사용불가
사용자 평점
4.84
누적 다운로드
사용자 후기

추가기능 활용 가이드
추가기능 사용법 안내
엑셀 추가기능은 실행파일이 아닌, 엑셀에 등록하여 사용하는 확장 도구입니다.
함수 구문
=IMPORTHTML(URL주소,형식,[순번(또는클래스)],[배열반환여부])
URL주소
-

데이터를 추출할 웹 페이지 주소입니다.

형식
-

추출할 데이터 형식입니다. "table, ul, ol" 중 하나를 입력합니다.

  • table : 표
  • ul (unordered list) : 번호없는 목록
  • ol (ordered list) : 번호 목록
순번(또는 클래스)
-
[선택인수]

출력하고자 하는 항목이 페이지에서 위치하는 순번 또는 항목의 클래스를 입력합니다. 순서는 큰따옴표(") 없이 숫자로 입력하며, 클래스는 큰 따옴표로 묶어서 입력합니다.

  • 순번 또는 클래스가 지정되지 않은 경우, IMPORTHTML 함수는 페이지에서 데이터가 가장 많은 항목을 출력합니다
배열반환여부
-
[선택인수]

TRUE일 경우, 결과값을 배열로 반환합니다. 기본값은 FALSE 입니다.

  • 엑셀 2021 이후, M365 버전 사용자는 배열 반환 여부를 TRUE로 사용합니다.
1. 엑셀 웹 크롤링 튜토리얼

웹 브라우저의 네트워크 도구 및 엑셀 VBA 매크로를 활용하여 웹 크롤링을 하는 전체 과정은 아래 영상 강의에서 자세히 정리했으니 참고하세요!😊

2. 벅스 뮤직 음악 차트 TOP 100 목록 가져오기
=IMPORTHTML( "https://music.bugs.co.kr/chart", "table", "list trackList byChart")
/ / 벅스뮤직 TOP100 음악 차트의 표를 출력합니다.

크롤링 음악 순위 가져오기 IMPORTHTML 함수

3. 1인당 명목 GDP 데이터 추출하기
=ImportHTML("https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(nominal)_per_capita", "table")
/ / 위키 백과에서 제공하는 1인당 GDP 데이터를 추출합니다.

엑셀-웹-크롤링-함수


알아두면 좋은 정보
사용 전 참고사항

추가기능 함수의 실행 내역은 실행 취소(Ctrl + Z) 기능을 지원하지 않습니다.

IMPORTHTML 함수의 배열 반환 여부가 FALSE 이고 출력 범위에 기존 값이 있을 경우, 함수는 기존 값을 지우고 새로운 값을 덮어쓰기 합니다.
엑셀 2021 이후, M365 버전 사용자는 배열반환여부를 TRUE로 사용하는 것을 권장합니다.

본 함수는 table, ul, ol 목록을 추출합니다. 커스텀 크롤링 작업이 필요할 경우, 아래 영상 강의를 참고하여 직접 함수를 수정 후 사용해보시길 바랍니다.


최신 업데이트 정보
버전 히스토리
버전
날짜
변경사항
2.0.0
2021-12-30
일부 엑셀 버전에서 발생하던 크롤링 오류 수정
1.2.0
2020-06-10
표의 각 행의 필드 개수가 다를 경우 값을 제대로 가져오지 못하던 오류 수정
1.1.0
2020-06-01
호환성 개선
1.0.0
2020-05-08
IMPORTHTML 함수 추가기능 업로드
댓글 62
4.8 (25개 평가)
스타크엑셀
스타크엑셀 2020.05.11 07:20
표나 목록이 아니라 div 로 여러개가 겹쳐져 잇는거는 방법이 없나요?ㅠ
오빠두엑셀
오빠두엑셀 작성자 2020.05.18 02:00
안녕하세요?^^ div 태그가 어떤 형식으로 쌓여있는지에 따라 달라집니다. 관련 링크를 한번 적어봐주시겠어요? 일반 함수로는 모든 상황을 적용하기에 한계가 있어 어려울듯 하고, 이전에 올려드린 웹 크롤링 매크로를 응용하시면 꼭 가능하실겁니다 :)
호
2022.02.23 11:31
오빠두님 혹시 스마트스토어 통계 탭의 자료도 크롤링 가능한가요??
여시
여시 2020.06.01 06:18
IMPORTHTML 함수로 이미지는 못 가져오나요?? 안되네요. 방법이 있으면 부탁합니다.
여시
여시 2020.06.01 06:47
그리고 지금 리턴값이 #NULL로 나오네요. 어디가 잘못되었는지도 한번 봐주심 감사합니다. IMPORTHTML("https://search.shopping.naver.com/search/category?catId=50000190","ul","list_basis")
오빠두엑셀
오빠두엑셀 작성자 2020.06.01 16:21
안녕하세요~:) 네이버에서 업데이트가 있었네요.. ^^; 업데이트 이후 특정 버전 이상에서만 접속이 가능하록 Java Script 가 변경되면서 추가기능도 업데이트하였습니다. 업데이트 된 1.0.1 버전을 사용해보시겠어요? 감사합니다!
여시
여시 2020.06.01 17:22
안녕하세요. 빠른 답변 감사합니다. 업데이트 후 "숨겨진 모듈 Module1에서 컴파일 오류가 발생했습니다. ..."메세지가 뜹니다.
오빠두엑셀
오빠두엑셀 작성자 2020.06.01 17:55
안녕하세요? 파일 수정해드렸습니다. 다시 확인해주시겠어요? :)
여시
여시 2020.06.01 19:19
네 잘 됩니다. 감사합니다. 한가지 더 문의. 이미지(URL경로)는 가져올 수 없나용?? 아니면 웹 크롤링으로 해야 할까요??? 시장조사와 상품분석(가격변동)에 필요한 엑셀 VBA을 만들어 보려합니다. 예제소스가 있으면 부탁드립니다. ( doit1042@daum.net ) 뒤늦게 본 주식관련 예제는 정말 도움이 되었습니다.
오빠두엑셀
오빠두엑셀 작성자 2020.06.01 23:33
웹 크롤링으로 이미지를 스크랩하는 방법에는 몇가지가 있는데, 그 중 가장 안전한 방법(후처리 작업 고려시)은 이미지를 물리적으로 하드디스크에 다운로드받은 뒤 해당 이미지를 삽입하는 것입니다 ^^ 아래 관련 링크가 있어 적어드리니 확인해보세요. https://codereview.stackexchange.com/questions/167631/scraping-images-from-a-webpage-and-saving-it-to-a-customized-folder-using-vba
여시
여시 2020.06.02 18:05
네. 웹 크롤링으로 이미지 경로을 받아서 처리하였읍니다. 감사합니다. 추가 질문 하나 더 ^^ 엑셀 웹 크롤링 작업시 워크시트에서 Web Browser1를 안보이게 (Hidden:)숨기는 방법이 있을까요?? 리턴값리스트만 보였으면해서요. 재 쿼리(실행)시 이미지가 중복되어 Sheet.Pictures.Delete 추가했더니 Web Browser도 지워지네요 ㅜㅜ
오빠두엑셀
오빠두엑셀 작성자 2020.06.02 18:37
물론 가능합니다 ^^ WebBrowser의 Visible 속성을 False로 변경하면 웹 브라우저가 숨겨집니다. 웹브라우저를 제외한 사진만 삭제하는 방법은 For Each 문으로 구현해보세요.
Dim shape As Excel.shape For Each shape In Sheet1.Shapes Select Case shape.Name Case "WebBrowser1" Shape.Visible = False Case Else shape.Delete End Select Next
여시
여시 2020.06.03 13:27
위 소스로 잘 해결했으나 Shape.Visible = False로 삭제해결^^ 그런데 WebBrowser의 Visible 속성을 False로 변경하면 다음 실행때 Wait_Browser MyBrowser가 루프에서 나오질 못하더군요 ㅜㅜ 그래서 Set MyBrowser = New InternetExplorer Set Mybutton = Sheet1.CommandButton1 로 변경 후 해결했읍니다 ^^ 갈길이 멀지만 ^^... 또 질문 ^^ 실행 후 이미지링크 리턴값이 중간에 바뀌는 현상이 일어납니다. For Each iArticle In HTMLDoc.getElementsByClassName("_productLazyImg") Sheet1.Cells(i, 2) = iArticle.alt Sheet1.Cells(i, 3) = iArticle.src Sheet1.Cells(i, 6) = iArticle.getAttribute("src") Next 이미지 값 형식이 다음 쿼리(줄) 부터 "https://shopping-phinf.pstatic.net/main_2039816/20398165635.20190726132117.jpg?type=f168" 에서 아래 같이 변합니다. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" 왜일까요??? URL 입니다.https://search.shopping.naver.com/best100v2/detail.nhn?catId=50000000&listType=B10002
오빠두엑셀
오빠두엑셀 작성자 2020.06.03 17:22
아래 링크 확인해보니 _productLazyImg 의 src 속성을 가져오는게 맞으나, LazyLoading 되고 있네요 ^^ 따라서 웹페이지 스크롤을 아래로 내려주는 작업을 추가해주셔야합니다. 아래 예제 코드를 적어드립니다.
Do While Err.Number = 0
        HTMLDoc.parentWindow.scrollBy 0, 99999
        Application.Wait Now + TimeSerial(0, 0, 1)
        ' 실행할 명령문
Loop
여시
여시 2020.06.06 03:14
안녕하세요^^ 질문을 계속드리다 보니깐.. IMPORTHTML 함수와 관련이 없네요 ㅎㅎㅎ 항상 답변 감사합니다.   추가 문의 드립니다. 페이지 중간에 search.shopping.naver.com/best100v2/detail.nhn?catId=50000000   인기상품, 인기검색어,인기브랜드,인기쇼핑몰 을 클릭하면 나오는  검색어 순위 리스트를 추출하려는데 안되네요 ㅜㅜ   <div class="menu"> <a href="#" class="on _goProdInfo">인기상품</a> <a href="#" class="_goKwdInfo">인기검색어</a> <a href="#" class="_goBRDInfo">인기브랜드</a> <a href="#" class="_goMallInfo">인기쇼핑몰</a> </div>    <em class="num1">1위</em> class="_popular_srch_lst_rank" title="리버클래시" HTML 추출과 순위리스트를 추출하려면 어떻게 하면 될까요..?    
오빠두엑셀
오빠두엑셀 작성자 2020.06.07 11:49
For 문으로 각 클래스를 가져오면 되지 않을까요? 또는 For Each 문으로 1씩 증가시켜서 오류가 나기 전까지 돌리시면 될듯 합니다..^-^ 아래와 같이 작성해보셔요.
On Error GoTo Done:
For Each 개체 in HTMLDoc
i = i + 1
cls = "num" & i
' 명령문 실행
Next
Done :
' 순위 추출 완료
굴레악
굴레악 2020.07.09 17:02
제가 필요로 했던 기능이 이거인 듯하네요. 학습해서 사용해보도록 하겠습니다. 감사합니다. (__)
dailytech
dailytech 2020.08.29 07:16
너무 좋은 기능인거 같습니다. 그런데 함수가 걸려있는 파일이 자꾸 종료되는데 어떻게 해결해야될까요?
오빠두엑셀
오빠두엑셀 작성자 2020.08.30 19:35
안녕하세요. :) 어떤 오류가 나오면서 종료되나요?
dailytech
dailytech 2020.08.30 21:56
답변 감사합니다. 임포트 함수를 10개 정도 걸어두었는데, 파일을 열면 로딩되다가 갑자기 종료됩니다. 오류메세지는 안나오고 그냥 종료되고 끝납니다. https://drive.google.com/file/d/1-rdoO658gVZgxwnT9EE8LMPzDVn1Js4h/view?usp=sharing
dailytech
dailytech 2020.09.01 10:16
해결이 어려운 문제인가요? 아니면 첨부로 보내드린 파일에서 문제가 없나요?
오빠두엑셀
오빠두엑셀 작성자 2020.09.17 16:08
안녕하세요. 회신이 늦었습니다. 적어주신 링크는 다운로드 승인이 필요하다면서 다운로드가 안되네요. 괜찮으시다면 info@oppadu.com 으로 파일을 보내주시겠어요? 확인 후 회신드리겠습니다.
굴레악
굴레악 2020.09.23 01:08
다나와는 안 될까요. =ImportHTML("http://prod.danawa.com/info/?pcode=6351641&cate=112782#bookmark_product_information","table","spec_tbl") #TIMEOUT!가 나오기도 하고 NULL 오류가 나오기도 하네요 ㅠ
오빠두엑셀
오빠두엑셀 작성자 2020.09.23 16:15
안녕하세요. 링크 확인해보니 해당 테이블은 "http://prod.danawa.com/info/ajax/getProductDescription.ajax.php" 라는 php 함수를 통해 출력됩니다. :) ImportHTML 함수로는 크롤링이 불가능하고 별도로 테이블 값을 받아오는 코드를 작성해주셔야 합니다.
굴레악
굴레악 2020.09.23 21:09
아하 그렇군요. 뭔가 일반적이지 않은 거 같긴 했어요. php를 사용했군요.
pilkyu****
pilkyu**** 2020.11.23 18:01
안녕하세요 오늘로 구독 1일차 엑셀 초보입니다. https://finance.naver.com/item/sise.nhn?code=047810 해당 싸이트의 현재주가를 가져오고 싶은데 =ImportHTML("https://finance.naver.com/item/sise.nhn?code=047810","table","class=num") 이게 맞을까요? 계속 값이 "NULL"로 뜨네요.. ㅠㅠ
오빠두엑셀
오빠두엑셀 작성자 2020.11.24 18:11
안녕하세요. 함수를 아래와 같이 사용해보세요.
=INDEX(ImportHTML("https://finance.naver.com/item/sise.nhn?code=047810","table","type2 type_tax",TRUE),1,2)
이불뭉치
이불뭉치 2021.01.15 17:30
안녕하세요. 막히던 부분을 해결해주셔서 감사합니다. =importhtml("https://finance.yahoo.com/quote/%5ESP500TR/history?period1=1452816000&period2=1610668800&interval=1d&filter=history&frequency=1d&includeAdjustedClose=true","table",1) 이럴 경우 5년치 데이터를 부르는건데 데이터가 100개로 나오는 이유는 뭘지 혹시 여쭤봐도 될까요? 저 주소에서 엑셀로 받으면 5년 데이터가 나오거든요.
오빠두엑셀
오빠두엑셀 작성자 2021.01.15 18:32
안녕하세요. 적어주신 페이지는 infinite Scroll 방식(스크롤을 내릴 때마다 자바스크립트 명령문으로 데이터 갱신)으로 구현되어 있어, 최초 보이는 100개 데이터만 크롤링 되는 것입니다. 5년치 데이터를 모두 크롤링하시려면 네트워크 분석을 해서 직접 크롤링 하셔야 합니다. https://query1.finance.yahoo.com/v7/finance/spark?symbols=GC%3DF&range=1d&interval=5m&indicators=close&includeTimestamps=false&includePrePost=false&corsDomain=finance.yahoo.com&.tsrc=finance 위 링크를 참고해서 크롤링해보세요. HTTP 요청을 사용한 크롤링 방식은 아래 강의를 참고해보시길 바랍니다. https://www.oppadu.com/%ec%97%91%ec%85%80-%ed%81%ac%eb%a1%a4%eb%a7%81-%eb%84%a4%ec%9d%b4%eb%b2%84-%eb%b6%80%eb%8f%99%ec%82%b0/ 제시해드린 답변이 도움이 되셨길 바랍니다.
이불뭉치
이불뭉치 2021.01.16 08:41
감사합니다. 알려주신 방법으로 해보겠습니다!!
어떡하죠
어떡하죠 2021.01.19 01:47
IMPORTHTML을 여러번쓰면 캐쉬가 많이 남아서인지 데이터를 불러오는데 엄청 오래 걸리게 됩니다. 찾아보니 한 시트에서 약 100번 정도밖에 못 쓴다고 하는데, 더 여러번 쓸 수 있는 방법이 없을까요? 캐쉬를 지운다던가...
오빠두엑셀
오빠두엑셀 작성자 2021.01.20 01:31
안녕하세요. IMPORTHTML 함수와 캐쉬는 무관합니다. 함수를 100개 입력시 느려지는 이유는, IMPORTHTML 함수는 인터넷에서 매번 값을 받아오는 함수여서 그렇습니다. 웹 페이지에서 직접 정보를 받아와야 하는 이상, PC의 사양, 인터넷 속도를 높이는 것 외에는 다른 방법이 없습니다.
소신있는FP
소신있는FP 2021.01.27 14:00
안녕하세요. 해보다가 막혀서 이렇게 질문 남겨봅니다. =ImportHTML("https://jumin.mois.go.kr/statMonth.do","table") 이렇게 입력하면 행정구역을 넣지 않은 전체 대한민국 기준으로 나오는데 드롭다운 형식의 검색어를 참조해서 크롤링 할 수는 없을까요? 특정 셀 ex) a2 : 부산시 , c2 : 사상구 부동산 크롤링 예제파일처럼 해당구를 직접입력하면 해당 페이지의 인구데이터를 가져오고 싶습니다. 남여 선택 x 네트워크에서 검색해서 새로 추가되는 페이지를 봐도 어디에서 가져오는 건지 알수가 없어서 이리 질문 드려봅니다.
오빠두엑셀
오빠두엑셀 작성자 2021.01.30 11:02
안녕하세요. ImportHTML 함수는 페이지에 보이는 값을 그대로 가져오는 함수입니다. 자바스크립트을 컨트롤 하려면 다른 방식으로 접근하셔야 합니다. 해당 페이지 분석 후 HTTP 요청으로 데이터를 가져오도록 명령문을 작성하시면 되는데요. 관련 강의는 아래 링크를 참고해보세요. https://www.oppadu.com/product/importhtml-%ed%95%a8%ec%88%98-%ec%b6%94%ea%b0%80%ea%b8%b0%eb%8a%a5/
부자되써
부자되써 2021.03.04 09:07
안녕하세요 꼭 필요한 내용이 있어 오늘 가입하고 해보다가 아직 개념이 없어 잘 안되어 질문 드립니다~ 비트코인의 시세를 가져오려고 하는데요 URL의 오른쪽 테이블에서 시세를 가져오려고 합니다. =INDEX(ImportHTML("https://www.upbit.com/exchange?code=CRIX.UPBIT.KRW-BTC","table","highlight borderNone",TRUE),2,2) 이렇게 작성했는데요 #REF! 로 나오네요 잘못된 부분 한번 봐주시면 감사하겠습니다.
오빠두엑셀
오빠두엑셀 작성자 2021.03.09 04:44
안녕하세요. https://www.upbit.com/exchange?code=CRIX.UPBIT.KRW-BTC 이 링크로 접속하니 바로 접속이 되지않고 5초 대기?가 나오네요 ^^; 그래서 오류가 나오는 듯 힙니다. 페이지를 분석하신 뒤 크롤링하셔야 할 듯 합니다. 홈페이지에서 "부동산 크롤링" 검색하신 뒤 강의를 참고해보시겠어요? 감사합니다.