Excel関数とChatGPTで三か国語同時翻訳する方法!インストール不要!

Excel関数とChatGPTで三か国語同時翻訳!インストール不要!

Excelのセルに入力されている外国語の文章を日本語やそれ以外の国の言語に同時翻訳し、セルへ出力したいときはないでしょうか。

けど、そんな中で悩むことは、

・Excelのセルに入力されている外国語を自動判別して日本語やそれ以外の国の言語に翻訳したいが方法がわからない
・Excelワークシート関数を使いChatGPT APIと連携し翻訳する方法が知りたいがどこにもない

ですよね。

今回はそんなお悩みを解決する

・Excelワークシート関数とChatGPT APIを使い、外国語を自動判別して日本語やそれ以外の国の言語に同時翻訳する方法

についてまとめます!

Excelワークシート関数とChatGPTで三か国語同時翻訳するイメージ

Excelワークシート関数とChatGPTで三か国語同時翻訳するイメージについて説明をします。

まず、Excelを用意します。

A2セルに翻訳したい文章を入れ、BIセルに翻訳したい言語を指定し、となりのC1セルへワークシート関数をいれると、

ChatGPTの翻訳結果が表示されます。

さらに複数言語を指定すると、その言語分の翻訳結果がセルに出力されます!

それでは早速実装して、使ってみましょう!

タカヒロ
タカヒロ
翻訳対象の言語は英語以外もできます!

前回のVBA版と今回のワークシート関数版との違い

前回のChatGPT APIと連携するVBAと今回のワークシート関数版の違いについて説明をします。

ExcelにChatGPTの回答を出力する方法!VBAでAPI連携!

前回はサブプロシージャとして実装したコードとなるため、Excelではマクロとして認識されます。

ただこの場合は使いたいときに随時マクロを実行しなければいけない手間がありました。

そこで今回はワークシート関数としてコードを実装し、セルに数式を入れれば、

即時にChatGPTの結果が表示されるようにし、マクロを実行する手間をなくしていきます。

タカヒロ
タカヒロ
ワークシート関数版のディメリットもありまして、関数を数多く実装すると処理が長くなってしまうのと、再計算時にも処理が走りますので、処理回数が多くならないよう注意してください。

Excelワークシート関数とChatGPTで三か国語同時翻訳する方法

ChatGPT連携元のExcelファイルを用意

まずは、ChatGPTの連携元となるExcelファイルを用意しましょう。

続いてA2セルまたは任意のセルに翻訳したい文章を入れます。

次にBIセルに翻訳する言語を入力します。
複数の言語を指定する場合は、「と」で区切るようにしてください。

ChatGPTのAPIキーを取得

今回使うChatGPTのAPIキーを取得しましょう。

API keys発行ページへアクセスします。

https://platform.openai.com/account/api-keys

タカヒロ
タカヒロ
初回ログインの場合はアカウントを登録してください。

「Create new secret key」をクリックし、出力されたAPIキーをメモします。

タカヒロ
タカヒロ
発行されたAPIキーは画面を閉じた後は見られなくなりますので、しっかり記録するようにしましょう。また、外部に漏れないよう注意しましょう。

ChatGPTのAPIを使う上での注意点

ChatGPTのAPIを使う上での注意点を先にお伝えします。

ChatGPTのAPIは利用していくと料金が発生する仕組みになっています。ですので、発行したAPIを数多く使ったり、第三者に共有し、不特定多数の人達に利用されたりすると知らぬ間に費用が多額になってしまっている可能性がありますので、十分注意してください。

ただ、初回登録時は18ドルの無料枠がありますので、それを超えない分量であれば料金は発生することはありません。

今どれぐらい使っているかを確認する方法はUsageページから確認することができますので、随時確認するようにしましょう。

Excelワークシート関数とChatGPTで三か国語同時翻訳するVBAコード

Excelワークシート関数とChatGPTで三か国語同時翻訳するVBAコードは以下の通りです。

Function EXTGPDTRAN(rangInput As Range, strLang As String)
 
    Dim objhttp As Object
    Dim APIKey As String
    Dim apiUrl As String
    Dim strTextToPredict As String
    Dim strRequestBody As String
    Dim strResponse As String
    Dim strModel As String
    Dim strInput As String
    Dim strOutput As String
    Dim arrInput As Variant
    Dim temp As Variant
    Dim temp2 As Variant
    Dim i As Integer
    Dim intCount As Integer
    Dim intMaxTokens As Integer
 
    'APIキーを入力します。
    APIKey = "sk-****************************************************"
    
    'ChatGPTのAPIから出力される最大文字数を指定します。
    intMaxTokens = 1000
    
    'ChatGPT APIのモデルを指定します。
    strModel = "text-davinci-003"
 
    '翻訳言語を取得します。セル改行コードは"\n"に置き換えます。
    strTextToPredict = Replace(strLang, Chr(10), "\n")
    
    'ChatGPTへの質問を作成します。
    strTextToPredict = "以下の文を" & strTextToPredict & "に翻訳してください。"
    
    '入力レンジが一つか複数であるかを判定します。
    If rangInput.Count = 1 Then
        '一つであれば翻訳文字列を変数に代入します。
        strInput = rangInput.Value
    Else
        '複数であれば配列として変数に代入します。
        arrInput = rangInput
    
        '翻訳文字列を取得します。セル改行コードは"\n"に置き換えます。
        For i = 1 To UBound(arrInput, 1)
            strInput = strInput & "\n" & Replace(arrInput(i, 1), Chr(10), "\n")
        Next
        
    End If

    '翻訳文字列と質問文を結合します。
    strTextToPredict = strTextToPredict & "\n" & strInput
 
    'リクエスト先のURLを設定します。
    apiUrl = "https://api.openai.com/v1/completions"
    
    'XMLHTTPオブジェクトをセットします。
    Set objhttp = CreateObject("MSXML2.XMLHTTP")
    
    With objhttp

        'リクエストのヘッダーを設定します。
        .Open "POST", apiUrl, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & APIKey
     
        ' リクエスト文を作成します。
        strRequestBody = "{""model"":""" & strModel & """, ""prompt"":""" & strTextToPredict & """, ""max_tokens"":" & intMaxTokens & ", ""temperature"":0.5, ""top_p"":1}"
        
        'リクエストを送信します。
        .send strRequestBody
        
        'APIからのレスポンスが返るまで待ちます。
        Do While .readyState <> 4
            DoEvents
        Loop

        'レスポンス情報をデバッグします。不要であれば削除してください。
        Debug.Print .responseText
     
        'レスポンスのテキスト情報をExcel出力用変数に代入します。
        strResponse = .responseText
    
    End With
    
    'Json形式のデータの内回答テキストがある位置から分割します。
    temp = Split(strResponse, "\n\n")
    
    '配列数を取得します。
    intCount = UBound(temp)

    '配列分処理を繰り返します。
    For i = 1 To intCount
        
        If i = intCount Then
            '最後の回答を代入します。
            temp2 = Split(temp(i), """,""")
            strOutput = strOutput & Chr(10) & Replace(Replace(temp2(0), "\n", Chr(10)), "\", "")
        Else
            '最後の回答以外を代入します。
            strOutput = strOutput & Chr(10) & Replace(Replace(temp(i), "\n", Chr(10)), "\", "")
        End If
        
    Next i
    
    '関数に回答内容を渡します。
    EXTGPDTRAN = strOutput
    
 
End Function

タカヒロ
タカヒロ
出力処理のところがパターン拾えていない可能性あり、不具合があればコメントいただければと存じます。
また、コードを別メディアなどで再公開する場合はこのページのリンクを張ってもらえると嬉しいです。

VBAを設定する

VBAを設定していきましょう。

先ほどメモしたAPIキーを入力します。

APIKey = "sk-****************************************************"

ChatGPTのAPIから出力される最大文字数を指定します。指定文字数が少ないと回答が途中で切れてしまう場合がありますので、注意してください。

intMaxTokens = 1000

ChatGPT APIのモデルを指定します。今回はGPT-3を対象にしています。新しいモデルが出た場合はこちらを変更してください。

strModel = "text-davinci-003"

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

翻訳ワークシート関数の仕様

翻訳ワークシート関数の内容と構文は以下の通りです。

[関数名] 説明 [構文] [引数]
EXTGPDTRAN 翻訳文字列に渡した値をChatGPTを経由し指定言語の翻訳結果を返します。 =EXTGPDTRAN(翻訳文字列または範囲,翻訳言語) 翻訳文字列または範囲:翻訳対象の文字列または複数セルを指定します。
翻訳言語:翻訳言語を指定します。複数言語の場合は「と」で区切ります。

Excelワークシート関数とChatGPTで三か国語同時翻訳する

まずは英文を日本語に翻訳する

まずはまずは英文を日本語に翻訳してみましょう。

英文をA2セルへ入力します。

I am currently studying VBA programming. It is very difficult, but I will do my best to learn it.

B2セルへ翻訳したい言語を指定します。

日本語

以下の数式を入れます。

=EXTGPDTRAN(A2,B2)

結果です。

はい、しっかり翻訳ができていますね!

複数セルの英文を翻訳対象にする

次は複数セルの英文を翻訳対象にします。

A3セル以降に以下の英文を入力します。

I study programming every day.
I want to be an engineer who can program in the future.
And I want to establish and run an IT company.

EXTGPDTRAN関数の第一引数を以下のように変更します。

=EXTGPDTRAN(A2:A5,B2)

はい、複数セルに入力された英文もしっかり翻訳ができていますね!

三か国語同時翻訳する

では、三か国語同時翻訳してみましょう。

B2セル以降に翻訳言語を指定します。

日本語と中国語と韓国語

EXTGPDTRAN関数の第一引数を以下のように変更します。

=EXTGPDTRAN(A2:A5,B2)

はい!英文が日中韓それぞれの言語に翻訳ができていますね!

コードの説明

ChatGPT APIと連携するVBAコードについて説明をします。

ChatGPTへの質問内容を取得します。セル改行コードは”\n”に置き換えます。

strTextToPredict = Replace(strLang, Chr(10), "\n")

ChatGPTへの質問を作成します。

strTextToPredict = "以下の文を" & strTextToPredict & "に翻訳してください。"

入力レンジが一つか複数であるかを判定します。

If rangInput.Count = 1 Then

一つであれば翻訳文字列を変数に代入します。

strInput = rangInput.Value

複数であれば配列として変数に代入します。

arrInput = rangInput

翻訳文字列を取得します。セル改行コードは”\n”に置き換えます。

For i = 1 To UBound(arrInput, 1) strInput = strInput & "\n" & Replace(arrInput(i, 1), Chr(10), "\n") Next

翻訳文字列と質問文を結合します。

strTextToPredict = strTextToPredict & "\n" & strInput

リクエスト先のURLを設定します。

apiUrl = "https://api.openai.com/v1/completions"

XMLHTTPオブジェクトをセットします。

Set objhttp = CreateObject("MSXML2.XMLHTTP")

リクエストのヘッダーを設定します。

.Open "POST", apiUrl, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & APIKey

リクエスト文を作成します。

strRequestBody = "{""model"":""" & strModel & """, ""prompt"":""" & strTextToPredict & """, ""max_tokens"":" & intMaxTokens & ", ""temperature"":0.5, ""top_p"":1}"

リクエストを送信します。

.send strRequestBody

APIからのレスポンスが返るまで待ちます。

Do While .readyState <> 4 DoEvents Loop

レスポンス情報をデバッグします。不要であれば削除してください。

Debug.Print .responseText

レスポンスのテキスト情報をExcel出力用変数に代入します。

strResponse = .responseText

Json形式のデータの内回答テキストがある位置から分割します。

temp = Split(strResponse, "\n\n")

配列数を取得します。

intCount = UBound(temp)

配列分処理を繰り返します。

For i = 1 To intCount Next i

最後の回答を代入します。

temp2 = Split(temp(i), """,""") strOutput = strOutput & Chr(10) & Replace(Replace(temp2(0), "\n", Chr(10)), "\", "")

最後の回答以外を代入します。

strOutput = strOutput & Chr(10) & Replace(Replace(temp(i), "\n", Chr(10)), "\", "")

関数に回答内容を渡します。

EXTGPDTRAN = strOutput

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Excelワークシート関数とChatGPT APIを使い、外国語を自動判別して日本語やそれ以外の国の言語に同時翻訳する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です