【VBA】ExcelにローカルLLMの回答を出力する方法!DeepSeekもオフラインで!

【VBA】ExcelにローカルLLMの回答を出力する方法!DeepSeekもオフラインで!

ExcelにローカルLLMの回答を出力したいときはないでしょうか。

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

・ExcelにローカルLLMの回答を出力したいが方法がよくわからない
・高性能なローカルLLMで安全、無料でテキスト生成をしたいが方法がわからない

ですよね。

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

・ExcelにローカルLLMの回答を出力する方法
・Excelで完全オフラインのDeepSeekからの回答を出力する方法

についてまとめます!

ExcelにローカルLLMの回答を出力するイメージ

ExcelにローカルLLMの回答を出力するイメージについて説明をします。

まず、Excelを用意します。

B1セルに質問内容B2セルにLLMのモデル名を入れ、マクロを実行すると、

ローカルLLMが呼び出され、その結果をB4セル以降に出力していきます。

今回は国産ローカルLLMのELYZA LLM と、より高性能でサーバーエージェントさんが日本語を追加学習させたDeepSeekを使って検証したいと思います。

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

ローカルLLMのモデルについて

ローカルLLM(Large Language Model)とは、クラウドサービスを使わずに自分のPCやサーバーで動作するAIモデルのことです。

通常のAI(ChatGPTやClaudeなど)はインターネットを通じてAPI経由で利用しますが、
ローカルLLMは完全無料、オフラインで利用可能で、お財布にやさしくプライバシーが守られるのが大きなメリットです。

たとえば企業の機密情報を扱うときや、金融機関などインターネットが禁止されている完全オフライン環境で生成AIを使いたいときによいでしょう。

タカヒロ
タカヒロ
ローカルLLMは完全オフラインなのでインターネットに情報が漏れない点が良いですね!
機能や情報を追加してオリジナルのコパイロットを作ってもよいでしょう。
なおGPU積んでいてかつメモリ大きめのパソコンが必要ですのでその点ご了承くださいませ。

ローカルLLMを動かす手順について

ローカルLLMを動作させるには、十分なスペックのPCと、専用のツール(LM Studio)が必要です。
ここでは、必要なスペックやLM Studioの導入手順を説明します。

💻 必要なPCスペック

ローカルLLMを快適に動作させるためには、以下のスペックが推奨されます。

項目 推奨スペック
CPU Intel Core i7 / Ryzen 7 以上(マルチスレッド対応が望ましい)
GPU NVIDIA RTX 3060(12GB VRAM)以上(CUDA対応必須)
メモリ 16GB以上(推奨 32GB)
ストレージ SSD 512GB以上(モデルサイズが大きいため)
OS Windows 10/11、または Linux(Ubuntu 20.04+)

GPUは必須?

CPUでも動作は可能ですが、非常に処理が遅くなるため、NVIDIA製のGPU(VRAM 12GB以上)の搭載を推奨します。

例えば、タカヒロの環境では、

  • CPU: Intel Core i7
  • メモリ: 32GB
  • ストレージ: 1.5TB
  • GPU: ラップトップ版 RTX 3060(6GB VRAM)

という構成になっています。
このスペックでも動作は可能ですが、
より快適な環境を求める場合は高性能なGPUを搭載したPCを選ぶのが理想的です。

おすすめのPC選び

  • スペックが良いほど最適で長期間快適に使えるため、可能な限り上位モデルを選ぶのがベストです。
  • 特にRTXシリーズのGPUは必須レベルで、VRAM 12GB以上のモデルが望ましいです。
  • これらの条件を満たすPCは、一般的なビジネス向けノートPCではほぼ見つからず、ゲーミングPCのカテゴリで探す必要があります。

以下、AmazonのおすすめゲーミングPCリストをご紹介しますので、
気になる方はチェックしてみてください。

amazon RTX ノートパソコンで検索
amazon ゲーミングPCで検索

※商品プロモーションを含みます。

 

ローカルLLM ELYZA について

次に、今回使うローカルLLM ELYZA について説明します。

📌 特徴

  • 日本の企業「ELYZA」が開発した、日本語に特化したLLM
  • 商用利用も可能で、企業や個人がローカルで活用できる
  • llama-3-elyza-jp-8b という8B(80億パラメータ)のモデルが有名
  • 文章の要約、翻訳、QA(質問応答)などのタスクに強い
  • 軽量かつ効率的で、ローカル環境でも動作可能

🚀 強み

✅ 日本語特化のLLMなので、日本語の精度が高い
✅ オープンソースで利用できる(無料で試せる)
✅ 商用利用が可能なので、企業システムにも組み込みやすい

🔗 公式情報

DeepSeek(DeepSeek V2)

今回使うローカルLLM DeepSeekについて説明します。

📌 特徴

  • 中国のDeepSeek社が開発したLLM
  • 日本のサーバーエージェント社が日本語追加学習(ファインチューニング)を実施
  • DeepSeek V2130億(13B)パラメータの高性能モデル
  • 多言語対応だが、日本語の精度も高くなってきている
  • 高速かつ高性能なモデルで、計算効率が良い

🚀 強み

ELYZAよりも大規模で高性能(13Bパラメータ)
✅ 日本語の追加学習(ファインチューニング)済みで、日本語対応が向上
✅ PythonやVBAなどのコード生成タスクにも強い

🔗 公式情報


ELYZA LLM と DeepSeekの比較

項目 ELYZA LLM (8B) DeepSeek (13B)
開発元 日本(ELYZA) 中国(DeepSeek)
パラメータ数 8B(80億) 13B(130億)
日本語特化 特化 ◯(追加学習あり)
商用利用 ✅ 可能 ✅ 可能
性能 高速・軽量 高性能・高精度
用途 QA, 要約, 翻訳など コード生成, AIエージェントなど
動作環境 比較的軽量 GPUが必要(高性能)

普段使いはELYZAのほうが軽量でさくさくなのでよいでしょう。
DeepSeekは外漏れするのでは?という不安があるかと思いますが、ご安心ください。
サイバーエージェントさんが追加学習したものですし、オフラインで動作しますので外漏れなしです。

🛠️ ローカルLLMの導入手順

LM Studioを使う

「LM Studio」は、ローカルLLMを簡単に動作させるためのGUIアプリです。
特に難しい設定なしで、ELYZAやDeepSeekなどのLLMを動かすことができます

① LM Studioをダウンロード

公式サイト
https://lmstudio.ai/

Windows版をダウンロードします。

② LM Studio をインストール

ダウンロードした .exe ファイルを開き、指示に従ってインストールします。

③ モデル(ELYZA LLMやDeepSeek)をダウンロード

LM Studioを開きます。

マイモデル タブを開きます。

「llama-3-elyza-jp-8b」または「cyberagent-DeepSeek-R1」を検索します。

「Download」ボタンをクリックし、モデルをダウンロードします。

④ モデルを起動

「開発者」タブ を開きます。

ダウンロードしたモデルを選択します。

サーバステータスをONにします。
これによりAPIサーバが有効になり、http経由のやり取りが可能になります。

API Usageに「http://127.0.0.1:1234」 などと表示されたら成功です!

マイモデル タブを開きます。

ロードしたモデルはデフォルトではGPUオフになっていますので、各モデルの歯車アイコンから設定メニューへ移動し、
GPUオフロードの数をふやしてオンにしましょう。

GPUをオンにするとGPUメモリでおさまった8B以下のモデルは爆速になりました。

⑤ API経由で利用する(VBAと連携)

http://127.0.0.1:1234/v1/chat/completions にアクセスできることを確認します。
これでVBAやPythonからこのAPIを使って問い合わせが可能になります。

ExcelにローカルLLMの回答を出力する方法

ローカルLLM連携元のExcelファイルを用意

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

B1セルに質問内容を入れる枠を用意します。

ローカルLLMの結果はB3セル以降に出力していきます。

タカヒロ
タカヒロ
アイコンなど添えるとかっこよくなりますので、好みでいれてみてください。

 

ローカルLLM APIと連携するサンプルVBAコード

ローカルLLM APIと連携するVBAコードは以下の通りです。

Sub 質問をローカルLLMへ送る()

    ' JSONパーサーを導入しMicrosoft Scripting Runtimeを参照に追加する必要があります

    Dim objhttp As Object
    Dim strTextToPredict As String
    Dim strRequestBody As String
    Dim strResponse As String
    Dim strModel As String
    Dim strMessages As String
    Dim apiUrl As String
    Dim jsonResponse As Object

    ' モデル名
    strModel = Sheets(1).Range("B2").Value

    ' 入力セルからテキストを取得し、改行を処理
    strTextToPredict = Replace(Sheets(1).Range("B1").Text, Chr(10), "\n")

    ' JSON配列メッセージを準備
    strMessages = "[{""role"": ""user"", ""content"":""" & strTextToPredict & """}]"

    ' APIのURLを設定(ローカル LLM)
    apiUrl = "http://127.0.0.1:1234/v1/chat/completions"

    ' HTTPリクエストオブジェクトを初期化
    Set objhttp = CreateObject("MSXML2.XMLHTTP")
    With objhttp
        .Open "POST", apiUrl, False
        .setRequestHeader "Content-Type", "application/json"
        
        ' リクエスト本文を作成
        strRequestBody = "{""model"":""" & strModel & """, ""messages"":" & strMessages & "," _
                        & """temperature"": 0.7, ""max_tokens"": -1, ""stream"": false}"

        .Send strRequestBody

        ' レスポンスが成功したかどうかを確認
        If .Status = 200 Then
            strResponse = .responseText
        Else
            MsgBox "エラー: " & .Status & " - " & .statusText
            Exit Sub
        End If
    End With

    Debug.Print strResponse

    ' JSONレスポンスをパース
    Set jsonResponse = JsonConverter.ParseJson(strResponse)

    ' レスポンスに含まれる配列からメッセージ部分を出力
    If jsonResponse("choices")(1)("message")("role") = "assistant" Then
        Sheets(1).Range("B4").Value = jsonResponse("choices")(1)("message")("content")
    End If

End Sub

VBAの実装

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

JSONパース用のライブラリの実装

VBAでJsonConverterを使用するには、VBA-JSONというライブラリをインストールする必要があり、
以下の手順で実装していきます。

タカヒロ
タカヒロ
実装手順は少し複雑ですが、一度実装してしまえばそのあとの操作は不要ですので、がんばってみてください。

GitHubからVBA-JSONをダウンロード

VBA-JSONのGitHubリポジトリにアクセスします。
「Code」ボタンをクリックし、「Download ZIP」を選択して、プロジェクトをダウンロードします。

ダウンロードしたZIPファイルを解凍

ダウンロードしたZIPファイルを解凍し、中のファイルを確認します。

JsonConverterをインポート

Excelを開き、VBAエディタ(Alt + F11)を開きます。
プロジェクトエクスプローラーで、VBAプロジェクトを選択します。

「ファイル」メニューから「ファイルのインポート」を選択し、

解凍したフォルダから「JsonConverter.bas」ファイルを選択してインポートします。

インポートされると、JsonConverterオブジェクトがリスト一覧に表示されます。

参照設定を追加

VBAエディタの「ツール」メニューから「参照設定…」を選択します。
「参照可能なライブラリ」リストで、「Microsoft Scripting Runtime」を探し、チェックボックスをオンにして「OK」ボタンをクリックします。

これでVBAプロジェクトでJsonConverterを使用することができます!

ボタンを配置する

マクロをボタンから実行できるようにしていきましょう。

まずはリボンメニューの「開発」タブを選択し「挿入」>「フォームコントロール」>「ボタン」をクリックしボタンを配置します。

任意の名前に表示名を変更し、右クリック>「マクロの登録」から上記サンプルコードのマクロ名を指定します。

 

VBAからローカルLLMを実行する

llama-3-elyza-jp-8bモデルを使用し文章を要約する

今回使うモデルは以下です。

cyberagent-deepseek-r1-distill-qwen-14b-japanese
llama-3-elyza-jp-8b

まずは、llama-3-elyza-jp-8bモデルを使用し文章を要約してみます。

質問内容と、モデル名をセルに入力します。

ボタンを押してローカルLLMを実行してみましょう。

はい、しっかり日本語の要約ができていますね!
国産だけあって意味が通る自然な日本語の文章になりました!!

なお、8Bと軽量なため、実行速度は3秒ほどで、速度は速い部類かと思います。

cyberagent-deepseek-r1-distill-qwen-14b-japaneseモデルを使用し文章を要約する

次に、cyberagent-deepseek-r1-distill-qwen-14b-japaneseモデルを使用しより高精度な文章になるか検証をしてみましょう。

モデル名をcyberagent-deepseek-r1-distill-qwen-14b-japaneseへ変更します。

ボタンを押してローカルLLMを実行してみましょう。

はい、しっかり要約ができていますね!
さらに推論をし自己解釈した上で回答しているのがわかります!!すごい!

ただし、処理時間はけっこうかかりました。
1~2分ほど待った感じです。
GPUはずすと少し早くなったちょっと謎な現象もありました。
もうすこしいろいろいじってチューニングしてみます。

ローカルLLM APIと連携するVBAコードの説明

ローカルLLM APIと連携するVBAコードについて説明をします。
モデルを指定します。

strModel = Sheets(1).Range("B2").Value

ローカルLLMへの質問内容を取得しさらに改行コードを変換します。

strTextToPredict = Replace(Sheets(1).Range("B1").Text, Chr(10), "\n")

LMStudioのAPIのURLを設定します。

apiUrl = "http://127.0.0.1:1234/v1/chat/completions"

HTTPリクエストオブジェクトを初期化します。

Set objhttp = CreateObject("MSXML2.XMLHTTP")

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

strRequestBody = "{""model"":""" & strModel & """, ""messages"":" & strMessages & "," _
& """temperature"": 0.7, ""max_tokens"": -1, ""stream"": false}"

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

.send strRequestBody

レスポンスが成功したかどうかを確認します。ステータスが200であれば成功とみなします。

If .Status = 200 Then
strResponse = .responseText
Else
MsgBox "エラー: " & .Status & " - " & .statusText
Exit Sub
End If

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

Debug.Print .responseText

JSONレスポンスをパースします。

Set jsonResponse = JsonConverter.ParseJson(strResponse)

レスポンスに含まれる配列からメッセージ部分を出力するため、”assistant”である場合の条件を設定します。

If jsonResponse("choices")(1)("message")("role") = "assistant" Then
End If

回答である”assistant”の”content”の内容をセルに出力します。

Sheets(1).Range("B4").Value = jsonResponse("choices")(1)("message")("content")

VBAの実装手順

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

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

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

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

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

こちらで完了です。

VBAを実行する

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

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

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

さいごに

いかがでしょうか。

今回は、

・ExcelにローカルLLMの回答を出力する方法
・Excelで完全オフラインのDeepSeekからの回答を出力する方法

についてまとめました。

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

 



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

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







コメントを残す

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

CAPTCHA ImageChange Image