엑셀 x 네이버 파파고 API | 파파고 번역 함수 만들기 | PapagoTranslate 함수
네이버 파파고 번역 API를 활용하여 매월 백만자까지 무료로 번역가능한 PapagoTranslate 함수 만들기
이 강의에서는 네이버 파파고 번역 API를 호출해 엑셀 시트에서 사용할 수 있는 PapagoTranslate 사용자 정의 함수를 VBA로 구현하는 방법을 다룹니다. 개발자센터에서 애플리케이션을 등록해 API 키를 발급받는 절차부터 MSXML2.ServerXMLHTTP 객체로 HTTP 요청을 보내고 결과 문자열을 파싱하는 코드까지 단계별로 정리합니다.
실습 가이드
📣중요 알림
2024년 2월 29일부로 네이버 개발자센터의 파파고 API 무료 서비스가 종료되었습니다.
파파고 API 지원 종료 안내 [24.2.29.예정] - 공지사항 (naver.com)
현재 파파고 API는 네이버 클라우드 플랫폼에서 유료 서비스 형태로만 이용할 수 있습니다.
자세한 이용 방법은 아래 공식 안내를 참고하세요.
Papago Translation - AI Services - NAVER Cloud Platform 네이버 클라우드 플랫폼 (ncloud.com)
파파고 무료 API의 서비스 종료에 따라 본 강의의 예제파일 제공도 함께 중단되었음을 안내드립니다. 양해 부탁드립니다.
오빠두엑셀에서 제공하는 GoogleTranslate 함수를 사용하면
사용량 제한이나 API 발급 없이도 전 세계 109개 언어를 손쉽게 번역할 수 있습니다.

PapagoTranslate 함수 전체 명령문
엑셀 파파고 번역 함수인 PapagoTranslate 함수의 전체 VBA 코드입니다. 아래 코드를 복사한 뒤 안내된 순서에 따라 매크로 편집기에 붙여넣고, 네이버 개발자센터에서 발급받은 API 키와 보안키를 입력하면 월 최대 10만 자까지 실시간으로 번역할 수 있습니다.
Function PapagoTranslate(OriginalText, sFrom As String, sTo As String) As String '----------------------------------------- '네이버 개발자 센터에서 발급받은 API키와 보안키를 입력합니다. '네이버 개발자 센터 : https://developers.naver.com/ '----------------------------------------- Dim sID As String: sID = "xxxxxxxxx" '<- API키를 입력하세요. Dim sSecret As String: sSecret = "xxxxxxxxxx" '<- 보안키를 입력하세요. '----------------------------------------- Dim URL As String Dim Query As String Dim vArray As Variant Dim objHTML As Object Dim sResult As String URL = "https://openapi.naver.com/v1/papago/n2mt" Query = "source=" & sFrom & "&target=" & sTo & "&text=" & OriginalText ReDim vArray(0 To 3) vArray(0) = Array("User-Agent", "curl/749.1") vArray(1) = Array("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8") vArray(2) = Array("X-Naver-Client-Id", CStr(sID)) vArray(3) = Array("X-Naver-Client-Secret", CStr(sSecret)) Set objHTML = GetHttp(URL, Query, False, vArray) sResult = objHTML.body.innerHTML sResult = Splitter(sResult, "translatedText"":""", """,""engineType") If sResult = "" Then sResult = Splitter(sResult, "errorMessage"":""", """,""errorCode") PapagoTranslate = sResult End Function Function GetHttp(URL As String, Optional formText As String, Optional isWinHttp As Boolean = False, Optional RequestHeader As Variant) As Object '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ GetHttp 함수 '▶ 웹에서 데이터를 받아옵니다. '▶ 인수 설명 '_____________URL : 데이터를 스크랩할 웹 페이지 주소입니다. '_____________formText : Encoding 된 FormText 형식으로 보내야 할 경우, Send String에 쿼리문을 추가합니다. '_____________isWinHttp : WinHTTP 로 요청할지 여부입니다. Redirect가 필요할 경우 True로 입력하여 WinHttp 요청을 전송합니다. '_____________RequestHeader : RequestHeader를 배열로 입력합니다. 반드시 짝수(한 쌍씩 이루어진) 개수로 입력되어야 합니다. '▶ 사용 예제 'Dim HtmlResult As Object 'Set htmlResult = GetHttp("https://www.naver.com") 'msgbox htmlResult.body.innerHTML '############################################################### Dim oHTMLDoc As Object: Dim objHTTP As Object Dim i As Long: Dim blnAgent As Boolean: blnAgent = False Dim sUserAgent As String: sUserAgent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Mobile Safari/537.36" Application.DisplayAlerts = False If Left(URL, 4) <> "http" Then URL = "http://" & URL Set oHTMLDoc = CreateObject("HtmlFile") If isWinHttp = False Then Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") Else Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") End If objHTTP.setTimeouts 3000, 3000, 3000, 3000 objHTTP.Open "POST", URL, False If Not IsMissing(RequestHeader) Then Dim vRequestHeader As Variant For Each vRequestHeader In RequestHeader Dim uHeader As Long: Dim Lheader As Long: Dim steps As Long uHeader = UBound(vRequestHeader): Lheader = LBound(vRequestHeader) If (uHeader - Lheader) Mod 2 = 0 Then GetHttp = CVErr(xlValue): Exit Function For i = Lheader To uHeader Step 2 If vRequestHeader(i) = "User-Agent" Then blnAgent = True objHTTP.setRequestHeader vRequestHeader(i), vRequestHeader(i + 1) Next Next End If If blnAgent = False Then objHTTP.setRequestHeader "User-Agent", sUserAgent objHTTP.send formText With oHTMLDoc .Open .Write objHTTP.responsetext .Close End With Set GetHttp = oHTMLDoc Set oHTMLDoc = Nothing Set objHTTP = Nothing Application.DisplayAlerts = True End Function Function Splitter(v As Variant, Cutter As String, Optional Trimmer As String) '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ Splitter 함수 '▶ Cutter ~ Timmer 사이의 문자를 추출합니다. (Timmer가 빈칸일 경우 Cutter 이후 문자열을 추출합니다.) '▶ 인수 설명 '_____________v : 문자열입니다. '_________Cutter : 문자열 절삭을 시작할 텍스트입니다. '_________Trimmer : 문자열 절삭을 종료할 텍스트입니다. (선택인수) '▶ 사용 예제 'Dim s As String 's = "{sa;b132@drama#weekend;aabbcc" 's = Splitter(s, "@", "#") 'msgbox s '--> "drama"를 반환합니다. '############################################################### Dim vaArr As Variant On Error GoTo EH: vaArr = Split(v, Cutter)(1) If Not IsMissing(Trimmer) Then vaArr = Split(vaArr, Trimmer)(0) Splitter = vaArr Exit Function EH: Splitter = "" End Function
PapagoTranslate 함수 사용 방법
네이버 개발자센터에 가입하면 네이버 ID당 최대 10개의 API를 등록할 수 있습니다. 파파고 번역 API는 애플리케이션 1개당 하루 10,000자까지 번역할 수 있으므로, 한 계정으로 10개 애플리케이션을 모두 등록하면 일일 100,000자까지 번역할 수 있습니다.
- 아래 링크로 이동하여 네이버 개발자센터에 가입합니다. 기존 네이버 회원이라면 누구나 무료로 가입할 수 있습니다. (실명 인증 필요)

- 네이버 개발자센터에 가입한 뒤, 상단 메뉴에서 [Application] - [애플리케이션 등록]으로 이동합니다.

- 아래 순서에 따라 새 애플리케이션을 등록합니다.
항목 설명 애플리케이션 이름 식별하기 쉬운 이름을 입력합니다. (예: 내 파파고 API 등) 사용 API Papago 번역 API를 선택합니다. 비로그인 오픈 API 서비스 환경 환경 : WEB 설정 선택
웹 서비스 URL : https://naver.com - 등록하기 버튼을 누르면 파파고 번역 API 등록이 완료됩니다.
3-2. 파파고 번역 API 키 발급받기
등록한 애플리케이션의 'API 키'와 '보안키'를 확인하는 방법을 알아보겠습니다.
- 개발자센터 상단의 [Application] - [내 애플리케이션] 메뉴로 이동합니다.

- 애플리케이션 목록에서 방금 등록한 애플리케이션을 선택합니다.

- [개요] 페이지에서 발급받은 API 키와 보안키를 확인할 수 있습니다.
오빠두Tip : [보기] 버튼을 누르면 보안키를 확인할 수 있고, [재발급] 버튼을 누르면 보안키를 새로 발급받을 수 있습니다.
3-3. 엑셀 파일에 파파고 번역 함수 추가하기
- 새 통합문서를 추가합니다. 이후 엑셀 [개발 도구] - [Visual Basic] 버튼을 클릭하여 매크로 편집기를 실행합니다. 만약 [개발 도구] 탭이 보이지 않는다면 아래 링크를 참고하여 [개발 도구] 탭을 활성화합니다.
오빠두Tip : 단축키 Alt + F11 키를 누르면 매크로 편집기를 더 빠르게 실행할 수 있습니다. - 매크로 편집기에서 [삽입] - [모듈]을 클릭해 새 모듈을 추가합니다.

- 추가한 모듈 안에 위에서 안내해드린 PapagoTranslate 함수의 전체 명령문을 복사하여 붙여넣기 합니다.

- 네이버 개발자센터에서 발급받은 API 키와 보안키를 명령문 안에 입력합니다.

- 엑셀 시트로 돌아온 뒤, 아래 함수를 셀에 입력합니다.
=PapagoTranslate("안녕하세요?","ko","en")

- PapagoTranslate 함수가 정상적으로 동작하여 번역 결과가 출력되는 것을 확인할 수 있습니다.
오빠두Tip : 파파고 번역 API는 총 13개 언어를 지원합니다. 파파고에서 제공하는 전체 언어 목록은 아래 언어코드표에서 확인할 수 있습니다.
파파고 번역 함수는 아래와 같이 간단하게 사용할 수 있습니다. 만약 매일 10만 자 이상 대량으로 번역해야 하거나, 파파고에서 지원하지 않는 언어를 번역해야 한다면 오빠두엑셀 홈페이지에서 제공하는 GoogleTranslate 함수 추가 기능을 사용해보세요.
- 한국어를 영어로 번역하기
=PapagoTranslate("안녕하세요?","ko","en")
'결과값 : Hello?오빠두Tip : 파파고 번역 함수는 언어 감지 기능을 기본으로 제공하지 않습니다. 언어 감지를 활용하려면 별도의 언어 감지 API를 추가로 등록해야 합니다. - 셀에 입력된 문장을 영어에서 한국어로 번역하기
'A1 : Welcome! It's really happy to see you here!
=PapagoTranslate(A1,"en","ko")
'결과값: 환영합니다! 여기서 당신을 보니 정말 기쁘군요! - 여러 셀에 입력된 문장을 한 번에 다른 언어로 번역하기
'A1: 안녕하세요
'B1: 만나서 반갑습니다.
'C1: 즐거운 하루 보내세요.
=PapagoTranslate(Concatenate(A1,B1,C1),"ko","en")
'결과값: Hello, nice to meet you. Have a nice day.
라이브 강의 전체 영상도 함께 확인해보세요!
위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브 강의 풀영상을 시청할 수 있습니다.
엑셀 VBA로 다양한 프로그램을 제작할 때, Application.WorkSheetFunction을 사용하면 엑셀 워크시트의 모든 함수를 VBA에서도 손쉽게 호출할 수 있습니다.
- 예제파일에서 매크로 편집기를 실행한 뒤, Main 모듈로 이동하여 Test라는 명령문을 추가합니다.
Sub Test() '테스트 명령문을 추가합니다. End Sub

- 명령문 안에 Application.WorkSheetFunction을 입력한 뒤, 마지막에 .(점)을 입력하면 사용할 수 있는 함수 목록이 표시됩니다.
오빠두Tip : 매크로 편집기는 자동 완성 기능을 기본으로 지원합니다. 예를 들어 Application.Work 까지만 입력해도 WorkSheetFunction이 목록에 표시되며, 원하는 항목을 선택한 뒤 Tab 키를 누르면 코드가 자동으로 완성됩니다. - 사용할 함수로 VLOOKUP 함수를 입력합니다.

- VLOOKUP 함수를 입력하면 인수 목록이 표시됩니다. 입력 인수는 워크시트의 VLOOKUP 함수와 동일합니다. 이번 예제에서는 설정 시트의 표에서 "태국어"를 찾아 해당 언어 코드를 메시지박스로 출력해보겠습니다.
'찾을값 : "태국어" '찾을범위 : Sheet3.Range("A4:C17") -> Sheet3은 설정시트임 '열번호 : 2 '일치옵션 : 0 (정확히일치) MsgBox Application.WorksheetFunction.VLookup("태국어", Sheet3.Range("A4:C17"), 2, 0)
- Test 명령문을 선택한 후 키보드 F5 키를 누르거나 매크로 편집기 상단의 재생 버튼(▶)을 클릭하면 태국어의 언어 코드인 "th"가 메시지박스로 출력됩니다.

파파고 번역 API 언어 코드 표
파파고 번역 API에서 지원하는 13개 언어의 언어 코드는 아래 표와 같습니다. 번역 가능한 원본 언어와 목적 언어의 조합 현황은 아래 Papago 번역 API 레퍼런스 페이지에서 확인할 수 있습니다.
| 언어 | 언어코드 |
| ko | 한국어 |
| en | 영어 |
| ja | 일본어 |
| zh-CN | 중국어 간체 |
| zh-TW | 중국어 번체 |
| vi | 베트남어 |
| id | 인도네시아어 |
| th | 태국어 |
| de | 독일어 |
| ru | 러시아어 |
| es | 스페인어 |
| it | 이탈리아어 |
| fr | 프랑스어 |
다시 해보니 빠르게 움직이긴 하는데.. 번역이 안됩니다.. 번역이 되었던것도 다시 적용하면 번역이 사라지네요..ㅠㅠ 파파고랑 연동이 끊어진것인가 싶어 모듈로 들어가 봐도 알려주신 그대로인거같은데... 왜 이러는 걸까요 ㅠㅠ
아래 게시글 답변을 한번 확인해보시겠어요?
https://www.oppadu.com/question/?uid=21114&mod=document&pageid=1
감사합니다.
PapagoTranslate 매크로 명령문 중간에 F9키를 눌러 중단점을 설정하신 뒤,
F8키로 단계별로 실행하면서 명령문에 잘못된 부분이 없는지 한번 확인해보시겠어요?^^
감사합니다.
혹시 유료 사용 시 에는 다른 코드를 사용해야 하는 건가요?
API 유료와 무료 차이는 사용량만 다르고 모두 동일합니다.
만약 실행 도중 오류가 발생한다면, 오류가 발생한 부분 및 앞 부분에서 잘못된 내용이 없는지 한번 디버깅해보세요.
원문이 여러줄일 경우 파파고 API 결과값으로 어떻게 반환되는지 우선 확인해보시고, 코드를 적절히 수정해보세요 ^^
VBA에서 줄바꿈은 vbNewLine 또는 vbCrLf 또는 Chr(10) 입니다. Splitter로 줄바꿈을 나눈 후 번역 -> 결과값을 받아오거나, 결과값을 각 줄로 나누는 방법으로 구현해보세요.
함수 문제가 아닌 설정 문제로 보입니다. 엑셀 - 옵션에서 자동채우기 설정을 변경해보세요.
무료/유료 차이는 Quota 제한만 다르고 사용법은 동일합니다. (무료 Plan에서는 Quote 제한 초과 시, 오류메시지 출력)
출력되는 안내메시지를 참고하여 잘못된 부분은 없는지 한번 확인해보세요.
https://naver.github.io/naver-openapi-guide/errorcode.html
https://developers.naver.com/docs/nmt/reference/
그리고 완성파일을 받아서 사용했는데 PapagoTranslate(C7,"ko","en") 함수가 벨류 에러가 뜹니다. 번역시트에 행추가를 해보니 오류가 나고요..
많은 양을 번역해야 하는데 보안상 구글은 사용이 불가하고요... 방법이 없을까요?
매크로편집기에서
이전 부분에 Stop을 추가한 후 디버깅해보시길 바랍니다.
코드에는 이상이 없으므로, API키가 잘못되거나 값이 잘못되는 등 다양한 원인이 있을 수 있습니다.
코드 실행 과정에서 발생하는 모든 문제에 대해 답변을 드리기 어려운 점 양해부탁드리며, 세세한 오류는 직접 디버깅하여 해결하셔야 합니다.
한가지 질문이 있습니다. 구글사용때는 셀 안의 전체 내용이 번역 됐었느데요, 파파고의 경우 셀안의 첫줄만 번역이 되고 나머지는 번역이 안되네요. 저와 유사한 질문에 VBA수정을 해보라고 말씀을 하셨는데요 제가 너무 초짜라 어떻게 수정을 해야하는건지 모르겠습니다. VBA수정을 하는 방법을 배우기 위한 강의 Link를 알려주실수 있으실지요? 염치없이 부탁드려 죄송합니다.
오늘도 좋은 하루 되세요~
아래 VBA 기초 마스터 클래스 강의를 확인해보세요.
https://www.oppadu.com/%ec%97%91%ec%85%80-live-101%ea%b0%95/
감사합니다.