ExcelにVBAで翻訳してくれるオリジナルDeepL関数を作る

高性能の翻訳で定評があるDeepLというサービスがあります。月間500,000文字まで翻訳をしてくれるAPIが無料で使えます。前回はExcelのWEBSERVICE関数をつかって簡易的にAPIを利用してみました。今回はVBAのfunctionを使ってオリジナルのDeepL関数を作成します。第1引数にテキスト、第2引数に翻訳したい言語を指定することで、31言語に翻訳できます。※2023年1月現在

第2引数に中国語をあらわず"ZN"を指定すると中国語になりました

DeepLのAPIを利用するには、登録が必要です。このあたりの方法とAPIの使い方の基本については、前回の投稿を参考にしてください

いきなりですが、コードです

早速ですが、以下がVBAでオリジナルのDeepL関数をつくるコードです。オリジナルのテキストをエンコードして、APIのURLの後ろにつなげた状態でWebService関数に渡し、その結果から余分な部分を取り除いているだけです。

Public Const key = "ここにDeepL APIで使用する認証キーを記載します"
Sub macro1()
   'テスト用
   MsgBox (deepl("海賊王に俺はなる!", "EN"))

   '変換できる言語はこちらのURLから確認してください。
   'https://www.deepl.com/docs-api/translate-text/markup/
End Sub

Function deepl(originalText As String, Optional lang As String = "JA") As String
    'DeepL関数(第1引数にオリジナルテキスト,翻訳先言語指定)
    Dim api As String

    api = "https://api-free.deepl.com/v2/translate?auth_key=" & key
    target_lang = "&target_lang=" & lang
    originalText = "&text=" & WorksheetFunction.EncodeURL(originalText)
    api = api & target_lang & originalText
    
   'APIから戻ってきた結果から余分な部分を取り除く
    txt = Mid(WorksheetFunction.WebService(api), 59, 32700)
    deepl = Left(txt, Len(txt) - 4)
End Function

「macro1」と名前を付けたテスト用マクロも書きました。

実際にDeepL関数を使ってみましょう。""で囲った中に適当な言語の文章を入れてみましょう。オリジナルの文章はの言語は自動的に検出してくれます。※例文はシェークスピアのハムレットの一節らしいです。

第2引数に何も指定しない場合は、自動的に日本語になります。

第2引数に言語を指定すると、その言語の翻訳が出力されます。たとえば、フランス語の場合は第2引数に"FR"をしてみました。読めないですが、英語の文章が自動的にフランス語になりました。

指定できる言語は2023年現在31言語。本家のページは英語でしたが、ちょうどよいのでターゲット言語をExcelにはりつけて日本語にしてみました。

BG - ブルガリア語
CS - チェコ共和国
DA - デンマーク語
DE - ドイツ語
EL - ギリシャ語
EN - 英語 (後方互換性のため未指定のバリアント。代わりにEN-GBまたはEN-USを選択してください)
EN-GB - 英語(イギリス)
EN-US - 英語(アメリカ)
EN - スペイン語
ET - エストニア語
FI - フィンランド語
FR - フランス
HU - ハンガリー語
ID - インドネシア語
IT - イタリア語
JA - 日本語
LT - リトアニア語
LV - ラトビア語
NL - オランダ語
EN - ポーランド語
PT - ポルトガル語(後方互換性のため未指定のバリアント、代わりにPT-BRまたはPT-PTを選択してください。)
PT-BR - 英語(ブラジル語)
PT-PT - ポルトガル語(ブラジルのポルトガル語を除く全ポルトガル語圏)
RO - ルーマニア語
RU - ロシア語
SK - スロバキア語
SL - スロベニア語
SV - スウェーデン語
TR - トルコ語
UK - ウクライナ語
ZH - 中国語(簡体字)

https://www.deepl.com/docs-api/translate-text/markup/ で確認することができます。

外部のAPIを利用するので、会社によっては社内情報の外部漏洩を防止するために禁止しているケースもあります。このあたりは確認してから使ってください。