0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで生成AIマクロ(Gemini)

0
Last updated at Posted at 2025-11-01

~Excel上で利用できるAI関数の自作と業務効率化~

はじめに

この記事では、Excelから直接Geminiを呼び出してAI関数を自作する方法を解説します。
分類・要約などをExcel関数として使えるようにすることで、業務の効率化が狙えます。

今回は、LLM活用に必要なAPIキーを外部ファイル(INI形式)で管理します。
これにより、AI関数を含むExcelブックを安全に社内共有できるようになります。

INIファイルの読み込みに関しては、以下の記事を参考にしています:
https://qiita.com/kenichik0304/items/a1a9dad821ebc9cb46e3


全体像・仕組み

基本構成は以下の2ステップで構築します。
1.INI設定ファイルの作成
2.生成AIへのリクエスト関数を含むエクセルファイル作成


構築手順・設定

  1. APIキー発行:今回はGoogle AI StudioでGeminiのAPIキーを作成・保管
  2. INIファイル準備iniファイル に APIKEYやDESCRIPTION など定義し、ブックと同階層へ配置
  3. Excelブック設定:VBAプロジェクトにJsonConverter(BAS)を追加、さらに参照設定を有効化
  4. LLM関数実装:VBAでINI読込→Gemini呼び出し→レスポンス抽出→セルに反映

各論1:Gemini APIキーの取得手順(Google AI Studio)

GeminiをExcelなど外部アプリから利用するためには、まず Google AI Studio でAPIキーを発行します。
※無料枠があり、個人アカウント(Gmail)でも作成可能です。

手順

  1. AI Studioへアクセスし、Googleアカウントでログイン
    👉 https://aistudio.google.com/

  2. 左メニューで「API keys」 を選択

  3. 「Get API key」ボタン をクリック

  4. 初回アクセス時は「プロジェクト作成」確認が出るが、クリックで自動作成される

  5. 「Create API key」ボタン を押す

  6. APIキーが生成される


各論2:INI構成例

APIキーなどを外部ファイルで安全に管理します。
共通設定と個別設定をセクションで分けておくと便利です。
※ APIキーは実際に取得したコードに差し替えてください

[default]
description=""

[common]
; 共有で使うベースフォルダ(相対参照にすると配布が楽)
URL = "C:\Users\%USERNAME%\Downloads\AI関数テスト\ "

[GoogleGemini]
; 対象エクセルに設定するキー(下記は例)
APIKEY=AIzaSy-REPLACE_WITH_YOUR_KEY
description="INIファイルで読み込んで複数ファイルでAPI接続を共有するためのもの"

各論3:エクセルブックの準備

参照設定

  • VBAエディタ→「ツール」→「参照設定」で Microsoft Scripting Runtime を有効化。

JsonConverter導入

  • VBA-JSON から、JsonConverter.bas をダウンロード
  • エクセルの標準モジュールにインポート。

各論4:LLM関数の準備

以下のコードを標準モジュールに貼り付けてください。
活用LLMモデルなどは、適宜変更してください

Option Explicit
Dim GEMINI_APIKEY As String

'■■■■■■■■■ 必要に応じて変更する定数など
'Private Const MODEL_NAME As String = "gemini-2.0-flash"
Private Const MODEL_NAME As String = "gemini-2.0-flash-lite"
Private Const MAX_TOKENS As Long = 10000
Private Const RESPONSE_TIMEOUT_SEC As Long = 60 ' タイムアウト初期値

'=====================================
'【パブリック関数】
'=====================================
'
' Gemini_ChatCompletion
'
'   機能:システムメッセージとユーザーメッセージを引数として受け取り、
'         APIリクエストを作成・送信し、レスポンスを解析して結果を返す
'
Public Function Gemini関数(systemMessage As String, userMessage As String) As String
    Dim requestBody As String
    Dim responseText As String
    Dim parsedResponse As Object
    Dim JsonString As String
    Dim Gemini_SystemString As String
    
    'APIキーの取得
    GEMINI_APIKEY = Worksheets("設定読込").Range("c2").Value
    
    'Geminiはコードを返しがちなので、コードを含めないことをプロンプトに明記する
    Gemini_SystemString = "コードは返さず、指定された形式の結果値のみ返す"
    
    ' JSONリクエストの作成(修正済み)
    requestBody = CreateRequestBody(systemMessage & vbCrLf & Gemini_SystemString & vbCrLf & "プロンプトの指示対象となる値は" & vbCrLf & userMessage)
    
    ' APIリクエストの送信
    responseText = SendHttpRequest(requestBody)
    
    ' レスポンスの解析
    Set parsedResponse = ParseJsonResponse(responseText)
    
    ' デバッグ出力
    JsonString = ConvertJsonToString(parsedResponse)
    Debug.Print "API Response: " & responseText
    Debug.Print "Parsed JSON: " & JsonString
    
    ' 応答メッセージを返す
    Gemini関数 = ExtractResponse(parsedResponse)
End Function

'=====================================
'【プライベート関数】
'=====================================
'
' JSONリクエスト作成関数(修正済み)
Private Function CreateRequestBody(userMessage As String) As String
    CreateRequestBody = "{""contents"": [{""role"": ""user"", ""parts"": [{""text"": """ & userMessage & """}]}]}"
End Function

' APIリクエスト送信関数
Private Function SendHttpRequest(requestBody As String) As String
    Dim http As Object
    Dim apiUrl As String
    Set http = CreateObject("MSXML2.XMLHTTP")
    apiUrl = "https://generativelanguage.googleapis.com/v1/models/" & MODEL_NAME & ":generateContent?key=" & GEMINI_APIKEY
    
    http.Open "POST", apiUrl, False
    http.setRequestHeader "Content-Type", "application/json"
    http.Send requestBody
    
    ' デバッグ出力
    Debug.Print "Request Sent to: " & apiUrl
    Debug.Print "Request Body: " & requestBody
    Debug.Print "HTTP Status: " & http.Status
    
    SendHttpRequest = http.responseText
End Function

' JSONレスポンス解析関数
Private Function ParseJsonResponse(responseText As String) As Object
    Dim JSON As Object
    Set JSON = JsonConverter.ParseJson(responseText)
    Set ParseJsonResponse = JSON
End Function

' 応答メッセージ抽出関数
Private Function ExtractResponse(parsedResponse As Object) As String
    Dim content As Object
    If parsedResponse.Exists("candidates") Then
        If parsedResponse("candidates").Count > 0 Then
            If parsedResponse("candidates")(1).Exists("content") Then
                If parsedResponse("candidates")(1)("content").Exists("parts") Then
                    If parsedResponse("candidates")(1)("content")("parts").Count > 0 Then
                        ExtractResponse = parsedResponse("candidates")(1)("content")("parts")(1)("text")
                        Exit Function
                    End If
                End If
            End If
        End If
    End If
    
    ' エラー時のデフォルトメッセージ
    ExtractResponse = "API Error: No response"
End Function

' JSONオブジェクトを文字列に変換
Private Function ConvertJsonToString(jsonObj As Object) As String
    On Error Resume Next
    Dim jsonText As String
    jsonText = JsonConverter.ConvertToJson(jsonObj)
    
    If Err.Number <> 0 Then
        jsonText = "Error converting JSON to string"
    End If
    
    ConvertJsonToString = jsonText
    On Error GoTo 0
End Function

注意点

  • Excelファイルを配布する場合は、APIキーをファイル内に残さない構成が理想的です。
  • 参照設定はブック単位で保存されるため、新しいブックを作る際は再設定が必要です。
  • APIレスポンスを確認できる仕組み(例:ログ出力やステータス表示)を追加しておくと便利です。
  • Gemini関数 はセル関数内でも利用可能ですが、再計算時に再実行される点に注意してください。
  • Google AI Studioで作成したAPIキーには利用上限(リクエスト数など)があります。

まとめ・応用

  1. 普段使いのExcel上ですぐに生成AIを利用可能
  2. INIによる外部管理でAPIキーを安全に扱える構成
  3. VBA+JsonConverterでシンプルなコード構成を実現

応用例:

  • ChatGPT/Claudeなど他モデルへの切替
  • Excel関数を使った文章要約・翻訳・分類
  • 社内テンプレートや日報の自動生成
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?