EXCEL VBA

엑셀 VBA 번역 사용자 정의 함수 만들기, 엑셀 VBA 번역기 직접 만들어 사용하기, 엑셀 영어 번역

카루루1007 2024. 1. 25. 16:31
728x90
반응형
SMALL

[ 들어가며 ] 

 

지난 블로그에서

엑셀에서 지원하는 번역기능을 소개한 적이 있습니다.

※ 엑셀 번역기능 사용하기, 엑셀에서 영어 번역하기, 엑셀에서 한국어를 영어로 바꾸기

 

하지만 이 기능은 아마 엑셀 2019 이상의 버전에서만

지원하는 것으로 알고 있습니다.

 

이전 버전에서도 번역 기능을 사용하려면

직접 만들어 사용할 수 있습니다.

 

오늘은 VBA를 사용하여

번역기능을 수행하는 사용자 정의함수를 만들어 보겠습니다.

 

[ 미리보기 ]

반응형

먼저 함수가 어떻게 작동되는지

살펴보겠습니다.

아래 그림을 참고하시면

함수가 어떻게 작동되는 지 직관적으로 알 수 있으실 겁니다.

728x90

지금 제작하는 사용자 정의함수는

구글 번역기를 활용한 것이기 때문에

구글 번역기로 번역할 수 있는

모든 언어의 번역이 가능할 것으로 보입니다.

 

[ 전체 코드 ]

 

아래는 전체 소스코드입니다.

파일은 별도로 첨부하도록 하겠습니다.

Function translate(BaseText As String, FromLang As String, ToLang As String) As String

    Dim Url As String
    Dim fullurl As String
    Dim elements As String
    Dim div As String
    Dim L1 As Integer
    Dim L2 As Integer

    Url = "https://translate.google.com/m?sl=" & FromLang & "&tl=" & ToLang & "&hl=" & FromLang & "&q="
    fullurl = Url & WorksheetFunction.EncodeURL(BaseText)

    elements = WorksheetFunction.WebService(fullurl)
    div = "<div class=""result-container"">"

    L1 = InStr(elements, div) + Len(div)
    L2 = InStr(L1, elements, "</div")

    translate = Mid(elements, L1, L2 - L1)

End Function

 

[ 코드 설명 ]

SMALL
Function translate(BaseText As String, FromLang As String, ToLang As String) As String

 

이 함수는 세 개의 매개변수를 받습니다.

BaseText : 번역하려는 원문

FromLang : 원문의 언어

ToLang : 번역하려는 언어

 

Dim Url As String
Dim fullurl As String
Dim elements As String
Dim div As String
Dim L1 As Integer
Dim L2 As Integer

 

다음으로 변수를 선언합니다.

Url : 구글 번역 페이지의 URL 템플릿

fullrul : 완성된 URL

elements : 웹 페이지의 HTML 요소

div : 번역 결과를 포함하는 div 태그

L1 / L2 : 문자열을 잘라내기 위한 위치 저장

 

Url = "https://translate.google.com/m?sl=" & FromLang & "&tl=" & ToLang & "&hl=" & FromLang & "&q="
fullurl = Url & WorksheetFunction.EncodeURL(BaseText)

 

Url 변수에 구글 번역페이지의 URL 템플릿을 저장하고,

fullurl 변수에 완성된 URL을 저장합니다.

EncodeURL 함수를 사용하여 BaseText를 인코딩합니다.

 

elements = WorksheetFunction.WebService(fullurl)

 

WebService 함수를 사용하여

fullurl 페이지의 HTML 요소를 가져와

elements 변수에 저장합니다.

 

div = "<div class=""result-container"">"

 

div  변수에 번역 결과를 포함하는 div 태그를 저장합니다.

 

L1 = InStr(elements, div) + Len(div)
L2 = InStr(L1, elements, "</div")

 

InStr 함수를 사용하여

elements에서 div와 </div>의 위치를 찾아

L1, L2 변수에 저장합니다.

 

instr 함수에 대한 설명은 아래 링크를 참고하시면 됩니다.

※ 엑셀 VBA Instr 함수, VBA 문자열 검색의 기본과 예시

 

translate = Mid(elements, L1, L2 - L1)

 

마지막으로 Mid 함수를 사용하여

elements에서 

L1 위치부터 L2 - L1 길이만큼의 문자열을 잘라내어 반환합니다.

 

[ 마치며 ]

 

이렇게 VBA를 사용하여

간단한 구글 번역기를 만들고

엑셀에서 사용할 수 있는 사용자 정의 함수를 만들어 보았습니다.

 

구글 번역기의 웹페이지에 의존적이기 때문에

구글의 번역기의 주소가 바뀌거나

웹 페이지의 구조가 변하면 사용할 수가 없을 수도 있습니다.

 

엑셀 365버전을 사용하고 있어

그 이전 버전의 엑셀에서 작동이 가능한 지 테스트 해보지 못했지만,

아마 사용이 가능할 것으로 보입니다.

 

혹시 2019 이전 버전의 사용자 분께서

제 블로그에서 방문해주셨다면

작동이 되는 지 댓글 부탁드리겠습니다.

translate.xlsm
0.02MB

여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.

엑셀 공부하기
VBA 공부하기

728x90
반응형
LIST