VBAからJavaアプリを呼び出す方法【システム間連携】

はじめに

業務現場では、Excelマクロ(VBA)とJavaで開発されたアプリケーションの連携ニーズが増えています。
たとえば、Excelで入力されたデータをJavaで処理したい、既存のJavaシステムをVBAから操作したいといったケースです。

この記事では、VBAから外部プロセスとしてJavaアプリを呼び出す方法と、その際の注意点を解説します。


前提条件

  • Windows環境
  • Javaアプリケーション(JARファイル)が作成済み
  • Excel 2013以降、VBA編集可能

1. Javaアプリケーションの用意

サンプルJavaコード

// HelloApp.java
public class HelloApp {
  public static void main(String[] args) {
    System.out.println("Javaアプリが実行されました!");
  }
}

コンパイルとJAR化

javac HelloApp.java
jar cfe HelloApp.jar HelloApp HelloApp.class

このコマンドで HelloApp.jar が生成されます。


2. VBAからJavaを呼び出すコード

VBAコード(Shell関数でJARを実行)

Sub RunJavaApp()
    Dim javaCmd As String
    javaCmd = "java -jar C:\JavaApps\HelloApp.jar"
    
    Dim result As Double
    result = Shell(javaCmd, vbNormalFocus)
    
    MsgBox "Javaアプリを起動しました(Shell戻り値: " & result & ")"
End Sub

ポイント

  • Shell関数でJavaをコマンドライン起動します
  • java コマンドのパスが通っている必要があります(例:環境変数 PATH に設定)

3. Javaアプリに引数を渡す

Java側(引数対応)

public class HelloApp {
  public static void main(String[] args) {
    if (args.length > 0) {
      System.out.println("VBAからの引数: " + args[0]);
    } else {
      System.out.println("引数がありません。");
    }
  }
}

VBA側(引数付き)

Sub RunJavaWithArgs()
    Dim value As String
    value = "テストデータ"
    
    Dim cmd As String
    cmd = "java -jar C:\JavaApps\HelloApp.jar """ & value & """"
    
    Shell cmd, vbNormalFocus
End Sub

ダブルクォートで囲むことで、日本語の引数にも対応できます。


4. Javaの出力をVBAで取得する(WshShell)

VBAコード(WshShellで標準出力を取得)

Sub RunJavaAndCaptureOutput()
    Dim shell As Object
    Set shell = CreateObject("WScript.Shell")
    
    Dim exec As Object
    Set exec = shell.Exec("java -jar C:\JavaApps\HelloApp.jar")
    
    Dim output As String
    Do While Not exec.StdOut.AtEndOfStream
        output = output & exec.StdOut.ReadLine & vbCrLf
    Loop
    
    MsgBox "Java出力:" & vbCrLf & output
End Sub

Exec を使うと Java の出力(System.out.println)を VBA 側で取得可能です。


5. 実運用に向けたヒント

  • JavaアプリからCSVやJSONで出力し、VBAで読み取る構成にすれば安定性UP
  • バッチ処理は非同期実行+ログ出力でトラブル対応も簡単に
  • 双方向通信が必要ならファイルやソケット、あるいは中間APIサーバを検討

まとめ

  • VBAからJavaアプリを簡単に呼び出すには Shell または WshShell.Exec を使用
  • 引数や出力取得も可能なので、実務でも十分に使える構成
  • さらに連携精度を上げたい場合は、JSONファイルやREST APIも選択肢に入れてください
タイトルとURLをコピーしました