VBAとLinuxサーバーを連携させてデータ処理を自動化する

業務の現場では、Windows環境でExcel+VBAを使いつつ、Linuxサーバー上でバッチ処理やデータベース操作を行うケースが増えています。
本記事では、VBAとLinuxサーバーを連携させて、データ処理を自動化する方法をわかりやすく解説します。


なぜVBAとLinuxサーバーを連携させるのか?

  • Excel利用者が多い:業務データの入力や集計はExcelで行われることが多い。
  • Linuxサーバーに処理を任せたい:ログ処理、大規模データ集計、DB連携などはLinux側が得意。
  • 自動化による効率化:VBAから直接Linuxサーバーを操作することで、手作業を減らし処理を一貫化できる。

連携の仕組み

VBA単体ではLinuxサーバーにSSH接続できません。そのため、以下のような方法を取ります。

  1. plink(PuTTY付属ツール)を利用
    • WindowsからLinuxにSSH接続できるコマンドラインツール
    • VBAからShell関数で呼び出し可能
  2. SCPでファイル転送
    • WinSCPのコマンドライン版を利用してデータ送受信
  3. Linuxサーバー側でシェルスクリプトを用意
    • データ処理の流れをあらかじめスクリプト化しておき、VBAから呼び出す

実装例:VBAからLinuxにSSH接続してコマンド実行

以下の例では、VBAからplink.exeを呼び出して、Linuxサーバー上でシェルスクリプトを実行します。

Sub RunLinuxCommand()

    Dim server As String
    Dim user As String
    Dim password As String
    Dim command As String
    Dim plinkPath As String
    Dim shellCmd As String
    
    ' 接続情報
    server = "192.168.1.100"
    user = "testuser"
    password = "password123"
    
    ' 実行するLinuxコマンド
    command = "sh /home/testuser/process.sh"
    
    ' plink.exe のパス(PuTTYをインストールして取得)
    plinkPath = "C:\tools\plink.exe"
    
    ' コマンド組み立て
    shellCmd = plinkPath & " -ssh " & user & "@" & server & " -pw " & password & " " & command
    
    ' 実行
    Shell shellCmd, vbNormalFocus
    
    MsgBox "Linuxサーバーでコマンドを実行しました。"

End Sub

実装例:VBAからLinuxへファイル送信(WinSCP利用)

Linux側で処理する前に、Excelから生成したCSVをアップロードするケースもよくあります。

Sub UploadFileToLinux()

    Dim winscpPath As String
    Dim server As String
    Dim user As String
    Dim password As String
    Dim localFile As String
    Dim remotePath As String
    Dim shellCmd As String
    
    ' WinSCPパス
    winscpPath = "C:\tools\winscp.com"
    
    ' 接続情報
    server = "192.168.1.100"
    user = "testuser"
    password = "password123"
    
    ' 転送ファイル
    localFile = "C:\work\data.csv"
    remotePath = "/home/testuser/data.csv"
    
    ' WinSCPスクリプト形式で実行
    shellCmd = winscpPath & " /command " & _
               """open scp://" & user & ":" & password & "@" & server & """ " & _
               """put " & localFile & " " & remotePath & """ " & _
               """exit"""
    
    ' 実行
    Shell shellCmd, vbNormalFocus
    
    MsgBox "Linuxサーバーにファイルをアップロードしました。"

End Sub

運用のポイント

  • 接続情報(パスワード)は安全に管理
    • 可能なら公開鍵認証を利用
  • Linux側の処理はシェルスクリプト化
    • 複雑な処理はVBAでなくLinuxに任せる
  • ログを残す
    • 実行結果をファイルに出力し、Excelで確認できるようにすると便利

まとめ

  • VBAからLinuxサーバーへは、plink(SSH)やWinSCP(SCP/SFTP)を経由して連携可能
  • Excelでデータ作成 → VBAでLinuxに送信 → Linuxで処理実行 → 結果をVBAで回収という流れが自動化できる
  • 現場でよくある「Excelとサーバーの橋渡し」を効率化できる
タイトルとURLをコピーしました