이 함수는 EGTools에 추가되었습니다.
Google의 번역 서비스를 이용한 번역은 URL에 번역 옵션을 넣어서 요청합니다.
로그인이 필요하지 않은 서비스라서 사용이 간편합니다.
서비스 주소는 https://translate.google.com 이나 모바일 버전이 좀 더 간단하므로
실제 사용에는 https://translate.google.com/m 을 사용합니다.
URL에 넣어야 할 옵션은 4가지 입니다.
- hl=xx : 화면에 사용할 언어입니다. 한국어는 ko로 지정
- sl=xx : 번역할 원문의 언어입니다. auto로 설정할 수 있습니다.
- tl=xx : 변역되어 나와야 하는 언어입니다. 생략하면 ko로 합니다.
- q=xx : 번역에 사용할 원문 문자열입니다. URLENCODE 하여야 합니다.
이렇게 구성하면 요청 URL이 아래처럼 됩니다.
https://translate.google.com/m?hl=ko&sl=ko&tl=en&q=%EC%82%B6%EC%9D%80%20%EA%B3%84%EB%9E%80%EC%9D%B4%EC%A3%A0
샘플 URL을 크롬 주소창에 넣고 시험해 보고 결과가 나오면 OK
이걸 VBA를 이용하여 사용자 정의 함수로 만들면 아래와 같습니다.
주의할 사항은 중국어의 경우 zh-CN과 zh-TW인데 대소문자를 정확히 적용해야 문제가 없으므로
강제로 적용되도록 코딩해 줍니다.
Public Function GTranslate(Text As Variant, Optional sl As String = "auto", Optional tl As String = "ko")
Dim svcURL As String: svcURL = "https://translate.google.com/m?"
Dim Cell As Variant, sText As String, rText As String, ll As String, iPos As Long
Dim sXML As String, oHTML As Object, oNodes As Object, oNode As Object
ll = ll & ",auto,af,sq,am,ar,hy,as,ay,az,bm,eu,be,bn,bho,bs,bg,ca,ceb,zh-CN,zh,zh-TW,co,hr,cs,da,dv,doi,nl,en,eo,et,ee,fil,fi,fr,fy,gl,ka,de,el,gn,gu,ht,ha,haw,he,iw,hi,hmn,hu,is,ig,ilo,id,ga,it,ja,jv,jw,kn,kk,km,rw,gom,"
ll = ll & "ko,kr,kri,ku,ckb,ky,lo,la,lv,ln,lt,lg,lb,mk,mai,mg,ms,ml,mt,mi,mr,mni-mtei,lus,mn,my,ne,no,ny,or,om,ps,fa,pl,pt,pa,qu,ro,ru,sm,sa,gd,nso,sr,st,sn,sd,si,sk,sl,so,es,su,sw,sv,tl,tg,ta,tt,te,th,ti,ts,tr,tk,ak,uk,ur,ug,uz,vi,cy,xh,yi,yo,zu,"
If InStr(1, ll, "," & sl & ",", vbTextCompare) = 0 Then GTranslate = "ERROR:Source language Code invalid": Exit Function
If InStr(1, ll, "," & tl & ",", vbTextCompare) = 0 Then GTranslate = "ERROR:Target language Code invalid": Exit Function
If Not IsInternetConnected Then GTranslate = "ERROR:No Internet connection": Exit Function
'// 언어코드 교정
sl = LCase(sl): tl = LCase(tl)
'// 한국어를 kr로 입력하는 오류 수정
If sl = "kr" Then sl = "ko"
If tl = "kr" Then tl = "ko"
'// 중국어는 zh-CN과 zn-TW 처럼 대분자가 있음에 주의
If sl = "zh" Then sl = "zh-CN"
If tl = "zh" Then tl = "zh-CN"
If sl = "zh-cn" Then sl = "zh-CN"
If tl = "zh-cn" Then tl = "zh-CN"
If sl = "zh-tw" Then sl = "zh-TW"
If tl = "zh-tw" Then tl = "zh-TW"
If TypeName(Text) = "Range" Or IsArray(Text) Then
For Each Cell In Text
sText = sText & IIf(sText = "", "", vbNewLine) & Cell
Next
Else
sText = CStr(Text)
End If
sText = Application.Trim(sText)
If sText = "" Then GTranslate = "": Exit Function
sText = EncodeURL(sText)
svcURL = svcURL & "hl=ko&sl=" & sl & "&tl=" & tl & "&q=" & sText
sXML = getURL(svcURL)
If InStr(1, sXML, "Error 413", vbTextCompare) Then GTranslate = "ERROR:Too long text.": Exit Function
'//결과값 확인 방식은 아래 2가지중 하나를 선택해서 사용
'// htmlfile을 이용하여 Tag와 ClassName으로 확인하는 방법
' Set oHTML = CreateObject("htmlfile")
' oHTML.body.innerHTML = sXML
' Set oNodes = oHTML.getElementsByTagName("div")
' For Each oNode In oNodes
' If oNode.classname = "result-container" Then rText = oNode.innerText: Exit For
' Next oNode
'// 텍스트를 잘라내서 확인하는 방법
iPos = InStr(1, sXML, "<div class=""result-container"">", vbTextCompare)
If iPos = 0 Then GTranslate = "ERROR:No result": Exit Function
rText = Mid(sXML, iPos + 30)
iPos = InStr(1, rText, "</div>", vbTextCompare)
If iPos = 0 Then GTranslate = "ERROR:html error": Exit Function
rText = Left(rText, iPos - 1)
GTranslate = DecodeHTML(rText)
End Function
여기에 사용된 IsInternetConnected 함수는 여기를 참고하세요.
https://egtools.tistory.com/entry/VBA-IsInternetConnected
EncodeURL함수와 DecodeHTML함수는 여기를 참고하세요.
https://egtools.tistory.com/entry/VBA-URLEncode-and-DecodeHTML-Using-htmlfile
getURL함수는 지정한 URL로부터 HTML소스를 가져오는 함수입니다.
https://egtools.tistory.com/entry/VBA-Web-Scraping
네이버 파파고 API를 사용하는 방법은 아래를 참고하세요.
https://egtools.tistory.com/entry/Naver-Papago-Translate-API
'Excel - VBA' 카테고리의 다른 글
대량의 목록을 한 번에 VLOOKUP 조회하는 mass VLOOKUP (0) | 2023.07.26 |
---|---|
Naver 파파고 API를 이용한 번역함수 만들기 (0) | 2023.07.11 |
VBA에서 Web 정보 가져오기 (Web Scraping) (0) | 2023.07.11 |
VBA CreateObject("htmlfile")을 이용한 URL Encode 및 HTML Entity 제거 (0) | 2023.07.10 |
VBA로 인터넷 연결을 확인하기 (0) | 2023.07.10 |