業務の現場では、Windows環境でExcel+VBAを使いつつ、Linuxサーバー上でバッチ処理やデータベース操作を行うケースが増えています。
本記事では、VBAとLinuxサーバーを連携させて、データ処理を自動化する方法をわかりやすく解説します。
なぜVBAとLinuxサーバーを連携させるのか?
- Excel利用者が多い:業務データの入力や集計はExcelで行われることが多い。
- Linuxサーバーに処理を任せたい:ログ処理、大規模データ集計、DB連携などはLinux側が得意。
- 自動化による効率化:VBAから直接Linuxサーバーを操作することで、手作業を減らし処理を一貫化できる。
連携の仕組み
VBA単体ではLinuxサーバーにSSH接続できません。そのため、以下のような方法を取ります。
- plink(PuTTY付属ツール)を利用
- WindowsからLinuxにSSH接続できるコマンドラインツール
- VBAからShell関数で呼び出し可能
- SCPでファイル転送
- WinSCPのコマンドライン版を利用してデータ送受信
- 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とサーバーの橋渡し」を効率化できる