엑셀 모든 버전에서 사용 가능! 구글 무제한 번역 | GoogleTranslate 함수 만들기
이제 엑셀에서 구글 번역 기능을 무제한으로 사용해보세요! 함수를 만드는 모든 과정과 추가기능을 배포하는 방법까지 단계별로 정리했습니다!🔥
이 강의에서는 엑셀에서 구글 번역 API를 호출하는 GoogleTranslate 함수를 VBA로 직접 제작하는 방법을 다룹니다. 구글 번역 URL 구조 분석부터 매크로 편집기에서의 함수 작성, 유니코드 인코딩 오류 처리, 그리고 추가기능(.xlam) 파일로 저장해 다른 엑셀 파일에서도 동일하게 활용할 수 있도록 배포하는 단계까지 순서대로 정리합니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
실습 가이드
라이브 강의 전체영상도 함께 확인해보세요!
위캔두 회원이 되시면 매주 오빠두엑셀에서 진행하는 라이브강의 풀영상을 확인하실 수 있습니다.
완성파일 실행 시 주의사항
이번 강의에서 제공하는 완성파일은 'VBA 매크로'가 포함된 "매크로 통합문서(*.xlsm)" 형식입니다. 따라서 사용 중인 엑셀 버전과 보안 설정에 따라 매크로 차단을 해제한 후 파일을 실행해야 정상적으로 동작합니다.
- 다운로드받은 완성파일을 우클릭 - [속성]으로 이동합니다. 속성창 하단에 '차단 해제' 옵션이 표시되면, '차단 해제'를 체크한 뒤 [적용] 버튼을 클릭하여 매크로 차단을 해제한 후 파일을 실행합니다.

- 파일을 연 후 엑셀 화면 상단에 표시되는 [편집 사용]과 [콘텐츠 사용] 버튼을 차례로 클릭하여 매크로를 활성화하면 완성파일에서 GoogleTranslate 함수를 바로 사용할 수 있습니다.
오빠두Tip : VBA 기반의 GoogleTranslate 함수는 윈도우 환경에서만 작동합니다. Mac 엑셀에서는 지원되지 않으므로 참고하세요!
아래 실습에 사용한 VBA 마스터 코드를 복사해 매크로 편집기에 붙여넣은 후 실습을 진행하세요!
'-------------------------------------- '● 이번 강의는 입문자 대상으로, 변수 설정이나 오류처리 없이 최대한 간단하게 준비했습니다. ' 오류처리를 모두 포함한 GoogleTranslate 함수 제작방법은 아래 프리미엄 클래스를 확인하세요! ' https://www.oppadu.com/엑셀-live-72강/ '--------------------------------------- '① GoogleTranslate 함수 작성하기 ' Function GoogleTranslate(originaltext, sFrom, sTo) ' Function GoogleTranslate(OriginalText, Optional sFrom = "auto", Optional sTo = "ko") ' '② 구글번역을 요청할 URL 만들기 ' strURL = "https://translate.google.com/m?sl=출발언어&tl=도착언어&q=번역할문장" ' '③ EncodeURL 함수로 유니코드언어 오류 처리하기 ' OriginalText = EncodeURL(OriginalText) ' '④ GetHTTP 함수로 URL 결과 받아오기 ' strResult = GetHTTP(strURL) ' '⑤ Splitter 함수로 <div class="result-container"> ~~~ <div> 사이 단어 반환하기 ' strResult = splitter(strResult,"<div class=""result-container"">", "</div>") ' '⑥ GoogleTraslate 함수 결과 반환 후 종료 ' GoogleTranslate = strResult ' '⑦ (선택) 결과값에 Error 413 코드 있을 경우, 최대 번역글자수 5000자 초과이므로, 오류 반환 후 종료 ' If InStr(1, strResult, "Error 413") > 0 Then GoogleTranslate = "#Request Too Large!": Exit Function Function GetHttp(URL, Optional formText As String, _ Optional isWinHttp As Boolean = False, _ Optional RequestHeader As Variant, _ Optional includeMeta As Boolean = False, _ Optional RequestType As String = "GET", _ Optional returnInnerHTML As Boolean = True) '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ GetHttp 함수 '▶ 웹에서 데이터를 받아옵니다. '▶ 인수 설명 '_____________URL : 데이터를 스크랩할 웹 페이지 주소입니다. '_____________formText : Encoding 된 FormText 형식으로 보내야 할 경우, Send String에 쿼리문을 추가합니다. '_____________isWinHttp : WinHTTP 로 요청할지 여부입니다. Redirect가 필요할 경우 True로 입력하여 WinHttp 요청을 전송합니다. '_____________RequestHeader : RequestHeader를 배열로 입력합니다. 반드시 짝수(한 쌍씩 이루어진) 개수로 입력되어야 합니다. '_____________includeMeta : TRUE 일 경우 HTML 문서위로 ResponseText를 강제 입력합니다. Meta값이 포함되어 HTML이 작성되며 innerText를 사용할 수 없습니다. 기본값은 False 입니다. '_____________RequestType : 요청방식입니다. 기본값은 "GET"입니다. '_____________ReturnInnerHTML : TRUE 일 경우 InnerHTML을 기본으로 반환합니다. 기본값은 TRUE 입니다. '▶ 사용 예제 'Dim HtmlResult As Object 'Set htmlResult = GetHttp("https://www.naver.com") 'msgbox htmlResult.body.innerHTML '############################################################### Dim oHTMLDoc As Object: Dim objHTTP As Object Dim HTMLDoc 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") Set HTMLDoc = CreateObject("HtmlFile") ' 2023-02-22 | 수정 | 윈도우 인증 접속 문제 발생 시 (일부 버전) ServerXMLHTTP -> XMLHTTP 요청으로 변경 ' XMLHTTP 요청 시, TimeOut 세팅 불가 (기본값 설정) ' https://stackoverflow.com/questions/11605613/differences-between-xmlhttp-and-serverxmlhttp On Error GoTo SendError: '------------------------------ If isWinHttp = False Then Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") Else Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") End If objHTTP.setTimeouts 1200000, 1200000, 1200000, 1200000 '응답 대기시간 120초 ' 2023-02-22 | 수정 | 윈도우 인증 접속 문제 발생 시 (일부 버전) ServerXMLHTTP -> XMLHTTP 요청으로 변경 SendRestart: '------------------------------ objHTTP.Open RequestType, 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 If includeMeta = False Then With oHTMLDoc .Open .Write objHTTP.responseText .Close End With Else oHTMLDoc.body.innerhtml = objHTTP.responseText End If If returnInnerHTML = True Then GetHttp = oHTMLDoc.body.innerhtml Else Set GetHttp = oHTMLDoc End If Set oHTMLDoc = Nothing Set objHTTP = Nothing Application.DisplayAlerts = True ' 2023-02-22 | 수정 | 윈도우 인증 접속 문제 발생 시 (일부 버전) ServerXMLHTTP -> XMLHTTP 요청으로 변경 Exit Function SendError: Set objHTTP = CreateObject("MSXML2.XMLHTTP") On Error GoTo 0 Resume SendRestart: '------------------------------ End Function Function ENCODEURL(varText As Variant, Optional blnEncode = True) '############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ EncodeURL 함수 '▶ 한글/영문, 특수기호가 포함된 문자열을 웹 URL 표준 주소로 변환합니다. '▶ 인수 설명 '_____________varTest : 표준 URL 주소로 변환할 문자열입니다. '_____________blnEncode : TRUE 일 경우 결과값을 출력합니다. '▶ 사용 예제 's = "http://www.google.com/search=사과" 's = ENCODEURL(s) 'MsgBox s '############################################################### Static objHtmlfile As Object If objHtmlfile Is Nothing Then Set objHtmlfile = CreateObject("htmlfile") With objHtmlfile.parentWindow .execScript "function encode(s) {return encodeURIComponent(s)}", "jscript" End With End If If blnEncode Then ENCODEURL = objHtmlfile.parentWindow.encode(varText) End If 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
요즘 대부분의 대형 서비스 플랫폼은 사용자가 편리하게 활용할 수 있도록 다양한 API를 제공합니다. API에는 여러 종류가 있지만, 그중 가장 널리 쓰이는 RestAPI(REST : Representational State Transfer)는 물음표(?)와 앰퍼샌드(&) 기호 두 가지만 이해하면 누구나 쉽게 사용할 수 있습니다. API 사용이 처음이라면, 아래 10분 기초 총정리 영상을 먼저 확인하세요!
- 아래 링크를 클릭하거나 인터넷 브라우저 주소창에 복사해 붙여넣어 구글 웹번역 페이지로 이동합니다.
https://translate.google.com/m

- 번역할 단어로 "안녕하세요"를 입력한 뒤 '번역' 버튼을 클릭하면, 아래 그림과 같이 URL 주소가 변경되면서 번역 결과 페이지로 이동합니다.
https://translate.google.com/m?sl=ko&tl=en&hl=en&q=안녕하세요

- 이전 API 기초 특강에서 살펴본 것처럼, 물음표(?)와 앰퍼샌드(&) 기호를 기준으로 구분하면 다음과 같이 API 주소를 분석할 수 있습니다.
· Root URL(기본주소) : https://translate.google.com/m
· sl(시작언어) : ko
· tl(도착언어) : en
· q(번역문장) : 안녕하세요 - 따라서 아래와 같이 시작언어, 도착언어, 번역문장이 동적으로 바뀌도록 URL 주소를 작성하면, 엑셀에서 구글 번역 API를 호출할 수 있습니다.
https://translate.google.com/m?sl=시작언어&tl=도착언어&q=번역문장
홈페이지에 올려둔 VBA 마스터 코드를 복사해 붙여넣은 뒤, 아래 순서에 따라 5단계만 따라 하면 누구나 엑셀에서 GoogleTranslate 함수를 바로 사용할 수 있습니다!🔥
- 홈페이지에서 다운로드받은 예제파일이나 비어있는 통합문서를 실행한 뒤, 엑셀 메뉴에서 [개발도구] 탭 - [Visual Basic] 버튼을 클릭하거나 단축키 Alt + F11을 눌러 매크로 편집기를 실행합니다.
오빠두Tip : 엑셀 메뉴에 '개발도구' 탭이 보이지 않을 경우, 리본메뉴를 우클릭 - '리본메뉴 사용자 지정'에서 '개발도구' 탭을 활성화합니다. - 매크로 편집기가 실행되면 [삽입] 탭 - [모듈]을 클릭하여 새 모듈을 추가합니다.

- 홈페이지에 올려둔 VBA 마스터 코드를 복사한 뒤, 새로 만든 모듈 안에 붙여넣기합니다.

- 아래 명령문을 복사한 뒤 Function GetHTTP(...) 가 작성된 줄 위에 붙여넣기합니다.
Function GoogleTranslate(OriginalText, sFrom, sTo) OriginalText = ENCODEURL(OriginalText) strURL = "https://translate.google.com/m?sl=" & sFrom & "&tl=" & sTo & "&q=" & OriginalText oResult = GetHttp(strURL) ' 2023년 9월, HTML 반환 오류로 인한 코드 수정 sResult = Splitter(oResult, "<div class=""result-container"">", "</div>") If Len(sResult) = 0 Then sResult = Splitter(oResult, "result-container>", "</DIV>") End If GoogleTranslate = sResult End Function
오빠두Tip : GoogleTranslate 함수의 자세한 동작 원리는 영상 강의를 참고하세요! - 매크로 편집기를 종료한 뒤 엑셀 시트에서 "=go"를 입력하면 함수 자동완성 목록에 "=GoogleTranslate" 함수가 표시됩니다.

- 아래와 같이 =GoogleTranslate 함수를 작성하면, 입력한 문장의 구글 번역 결과가 실시간으로 출력됩니다.
=GoogleTranslate("번역문장","시작언어","도착언어")
=GoogleTrsnalste("안녕하세요.","ko","en")
→ "hello"오빠두Tip : 이번 강의에서 다룬 VBA 함수와 다양한 엑셀 기능을 활용해 구글 번역 서식을 완성하는 방법은 위캔두 프리미엄 멤버쉽 강의에서 확인할 수 있습니다.
작성한 매크로 통합문서를 추가기능 형태로 저장하면 GoogleTranslate 함수를 다른 엑셀파일에서도 활용할 수 있을 뿐만 아니라, 여러 사람과 함께 추가기능을 공유하여 더 편리하게 작업할 수 있습니다.
- 추가기능으로 등록된 파일은 엑셀이 실행될 때마다 항상 함께 로드됩니다. 따라서 안정적인 동작을 위해 파일을 최적화하여 가볍게 유지하는 것이 중요합니다. 이전 단계에서 완성한 엑셀 파일의 시트 목록에서 [+] 버튼을 클릭해 비어있는 시트를 추가한 후, 나머지 시트는 모두 삭제합니다.
오빠두Tip : 추가기능으로 공유할 기능은 VBA로 작성한 '=GoogleTranslate' 함수이므로, 시트는 모두 안전하게 삭제해도 무방합니다. - [파일] 탭 - [다른 이름으로 저장]으로 이동한 뒤, 파일 형식에서 "Excel 추가기능(*.xlam)"을 선택하고 파일 이름은 "GoogleTranslate 함수 추가기능"으로 지정합니다.

- 저장 위치는 '바탕화면' (또는 접근하기 편한 폴더)으로 지정한 뒤 파일을 저장하면, GoogleTranslate 함수 추가기능 파일이 생성됩니다.

- 이제 기존의 엑셀파일을 종료합니다. 파일을 종료할 때에는 반드시 '저장 안 함'으로 종료해야 한다는 점에 주의합니다.
오빠두Tip : '저장' 버튼을 클릭하면, 앞서 작성했던 시트가 모두 삭제된 채 비어있는 시트만 남은 파일로 저장됩니다. - 새 엑셀파일이나 빈 통합문서를 실행한 뒤, [파일] - [옵션] - [추가기능] - [Excel 추가기능] - [이동] 버튼을 차례로 클릭해 '추가기능' 창을 연 후, [찾아보기] 버튼을 클릭하여 앞서 생성한 추가기능 파일을 선택합니다.

- 파일을 선택하면 아래 그림과 같이 GoogleTranslate 함수 추가기능이 등록됩니다. [확인] 버튼을 클릭해 등록을 마치면, 이후 =GoogleTranslate 함수를 입력하는 것만으로 모든 엑셀 파일에서 구글 번역 결과를 호출할 수 있습니다.
오빠두Tip : 단, 작성한 추가기능 파일을 다른 PC에서 등록하거나 다른 사람과 공유할 경우, 앞서 정리한 '매크로 차단' 설정 해제 절차를 거친 후 추가기능을 등록해야 합니다!
암호화 파일에서도 사용할 수 있습니다.
파일을 실행하시기 전, 파일을 우클릭 - 속성에서 '차단해제'를 체크한 후 파일을 실행합니다. 이후 엑셀 화면 왼쪽 위에 표시되는 '편집 사용'과 '콘텐츠 사용' 버튼을 각각 클릭해서 매크로를 포함한 후, 다시 함수를 사용해보시겠어요? :)
감사합니다.
그대로 따라 했는데도 아무것도 나타나지 않습니다. (빈셀)
혹시나 하고 집에서 해도 마찬가지 입니다.
뭐가 문제일까요?
홈페이지에 올려드린 GoogleTranslate 함수 코드 중,
부분 위에
를 작성 후 다시 실행해서 번역 결과가 어떻게 반환되는지 한번 확인해보시겠어요?
감사합니다.
"div"가 대문자이고, "result-container"가 따옴표로 둘러 쌓여 있지 않았습니다. 이를 반영해서 아래와 같이 코드를 고치니 정상 동작합니다.
sResult = Splitter(sResult, "<DIV class=result-container>", "</DIV>")
저도 따라서 해보고 완성파일도 다운받아 해보았는데 번역이 이루어지질 않습니다
첨부파일은 MsgBox sResult 붙여넣기후 에러 내용입니다.
결과값이 길어 메세지박스로는 내용이 잘리는 것 같습니다.
MsgBox sResult
이 부분을
Range("A1").value = sResult
로 수정 후 다시 실행해보세요. 그러면 전체 결과가 나올겁니다.
반환된 결과에서 <div class="result-container"> ~ </div> 사이에 결과가 올바르게 반환되는지 한번 확인해보세요.
감사합니다.
아래 코드를 제거했을 때 HTML 코드가 따로 뜨지는 않는데요. 이 경우에는 어떤 부분을 수정해야 첨부해주신 파일을 사용할 수 있을까요?
코드를 수정하면서 제가 하나를 빼먹었네요.
방금 코드와 완성파일을 새로 업로드했습니다.
업데이트 된 코드를 사용하시면 오류가 바로 해결될거에요.
감사합니다.
게시글의 '완성파일'을 다운받으시거나,
또는 아래 코드를 다시 한번 확인해보시겠어요?
위와 같이 </DIV> (대문자)가 포함된 코드를 사용하고 계신지 확인 후 , 코드를 수정해보세요. 잘 동작할겁니다.
감사합니다.
'안녕'이라는 단어 1개 넣었는데 약 10초가 걸립니다.
사용하고 계신 컴퓨터의 인터넷 환경을 확인해보시길 바랍니다. 😊
죄송한데 인터넷 환경 어디를 봐야 할지 전혀 감이 안옵니다.