はじめに
「Javaで作った業務ロジックを、Excelからワンクリックで実行したい」
——そんなニーズは現場でよくあります。
この記事では、JavaプログラムをExcel上のボタン1つで起動できる方法(バッチ連携)を解説します。
VBAとJavaを連携させることで、表計算とシステム処理の間を効率よく橋渡しできます。
想定シナリオ
- Javaで作成した処理:CSV出力・データ加工・API連携など
- ユーザーはExcelボタンを押すだけ
- 処理ログや出力ファイルを自動保存
1. Javaアプリケーションの準備
サンプルコード(CSVファイルを出力)
// CsvExportApp.java
import java.io.FileWriter;
import java.io.PrintWriter;
public class CsvExportApp {
public static void main(String[] args) throws Exception {
try (PrintWriter pw = new PrintWriter(new FileWriter("C:\\JavaOutput\\output.csv"))) {
pw.println("名前,スコア");
pw.println("山田太郎,90");
pw.println("佐藤花子,85");
}
System.out.println("CSV出力完了");
}
}
コンパイルとJAR化
javac CsvExportApp.java
jar cfe CsvExportApp.jar CsvExportApp CsvExportApp.class
→ 出力された CsvExportApp.jar
を、たとえば C:\JavaApps\
に配置しておきます。
2. ExcelにVBAボタンを追加
シートにボタンを挿入
- Excelを開き、「開発」タブ →「挿入」→「フォームコントロール:ボタン」
- ボタンを配置し、「マクロの登録」で
RunJavaProcess
を指定
VBAコードを書く
Sub RunJavaProcess()
Dim shell As Object
Set shell = CreateObject("WScript.Shell")
Dim javaPath As String
javaPath = """C:\Program Files\Java\jdk-17\bin\java.exe""" ' 必要に応じて修正
Dim jarPath As String
jarPath = "C:\JavaApps\CsvExportApp.jar"
Dim command As String
command = javaPath & " -jar """ & jarPath & """"
shell.Run command, 1, False
MsgBox "Java処理を実行しました。"
End Sub
shell.Run
の第2引数はウィンドウ表示モード(1: 通常)、第3引数は非同期(False)
3. 処理結果をExcelにフィードバック(オプション)
Java処理が完了後、出力されたCSVをVBAで読み取ってシートに表示することもできます。
Sub LoadCsvResult()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("A1:B100").ClearContents
With ws.QueryTables.Add(Connection:="TEXT;C:\JavaOutput\output.csv", Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileCommaDelimiter = True
.Refresh BackgroundQuery:=False
End With
End Sub
4. トラブル対策
問題 | 対応方法 |
---|---|
Javaが実行できない | java.exeのパスが通っているか確認 |
Excelがファイルを読み取れない | ファイルパスが正しいか、権限を確認 |
Javaの出力を確認したい | Java側でログファイル出力を追加する |
同期で処理完了を待ちたい | WshShell.Exec を使う |
まとめ
- Javaアプリをバッチ化(JAR化)すれば、VBAから簡単に起動可能
- Excelボタンにマクロを割り当てることで「ワンクリック実行」を実現
- 処理結果の読み込みまで組み合わせれば、業務自動化に最適な構成に