[ 들어가며 ]
지난 블로그에서
엑셀에서 지원하는 번역기능을 소개한 적이 있습니다.
※ 엑셀 번역기능 사용하기, 엑셀에서 영어 번역하기, 엑셀에서 한국어를 영어로 바꾸기
하지만 이 기능은 아마 엑셀 2019 이상의 버전에서만
지원하는 것으로 알고 있습니다.
이전 버전에서도 번역 기능을 사용하려면
직접 만들어 사용할 수 있습니다.
오늘은 VBA를 사용하여
번역기능을 수행하는 사용자 정의함수를 만들어 보겠습니다.
[ 미리보기 ]
먼저 함수가 어떻게 작동되는지
살펴보겠습니다.
아래 그림을 참고하시면
함수가 어떻게 작동되는 지 직관적으로 알 수 있으실 겁니다.
지금 제작하는 사용자 정의함수는
구글 번역기를 활용한 것이기 때문에
구글 번역기로 번역할 수 있는
모든 언어의 번역이 가능할 것으로 보입니다.
[ 전체 코드 ]
아래는 전체 소스코드입니다.
파일은 별도로 첨부하도록 하겠습니다.
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
[ 코드 설명 ]
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 이전 버전의 사용자 분께서
제 블로그에서 방문해주셨다면
작동이 되는 지 댓글 부탁드리겠습니다.
여기를 방문하시면 더 많은 엑셀 관련 자료를 확인할 수 있습니다.
'EXCEL VBA' 카테고리의 다른 글
VBA With-End With 구문에 대한 기초 설명, With-End With 사용 방법 (1) | 2024.01.30 |
---|---|
엑셀 VBA Instr 함수, VBA 문자열 검색의 기본과 예시 (1) | 2024.01.26 |
엑셀 VBA로 중복없는 무작위 숫자 생성하기, 중복없는 랜덤 숫자 생성하기 (0) | 2024.01.12 |
엑셀 VBA 윤년을 확인하는 사용자 정의함수 만들기 (0) | 2024.01.02 |
매크로 기록하기, 절대참조 기록하기와 상대참조 기록하기 (0) | 2023.12.05 |