【VBA × WinSCP × Amazon S3】VBAからS3にファイルを自動アップロードする方法

✅ はじめに

VBAからAmazon S3にファイルを自動アップロードしたい——
しかし、直接HTTP通信やAWS SDKを使うのはハードルが高いと感じる方も多いはず。

そこで今回は、WinSCPを経由することで、シンプルかつ安全にVBAからS3へファイルアップロードを行う方法を解説します。


■ 仕組みの全体像

操作は以下の3段階に分かれます:

  1. VBAでバッチファイル(.bat)を呼び出す
  2. そのバッチファイルがWinSCPを起動し、コマンドファイル(.txt)を実行
  3. WinSCPのコマンドファイルで、Amazon S3への接続&アップロードを実行

※別に、VBA使用しなくても直実行でもOK


■ 実装ステップ

1. VBAでバッチファイルを実行

Sub control_winscp()
    Shell ("C:\Program Files (x86)\WinSCP\execute_upload.bat")
End Sub

2. バッチファイル(execute_upload.bat)の内容

@echo off
cls
echo {シークレットキー} | "C:\Program Files (x86)\WinSCP\WinSCP.com" /console /script="C:\Program Files (x86)\WinSCP\winscp_upload_commands.txt"

✔ ポイント

  • | を使って標準入力としてシークレットキーを渡しているのが肝
  • WinSCP.com/script= パラメータでコマンドファイルを渡す構成

3. WinSCPコマンドファイル(winscp_upload_commands.txt)

open s3://{アクセスキー}@s3.amazonaws.com:{ポート}/{バケット名}
cd {アップロード先のディレクトリ}
put "\\パス\to\upload\file1.htm"
put "\\パス\to\upload\file2.png"
put "\\パス\to\upload\フォルダ名"

■ 解説

  • open: S3バケットへ接続(アクセスキーと連携)
  • cd: ディレクトリ移動
  • put: ファイルやフォルダをアップロード

⚠ 注意点・トラブルシューティング

  • バッチファイルで文字化けが発生する可能性あり
    → 保存時にUTF-8でなくANSIで保存してみる、またはファイル名やパスを英数字に統一。
  • 自動実行がAWSのポリシーに抵触する可能性あり
    → セキュリティポリシーを確認し、IAM権限の最小化やMFA連携も検討を。
  • base64などでキーを事前に暗号化しておくのも一案

■ まとめ

この方法を使えば、VBAからS3へファイルアップロードを自動化することが可能になります。
WinSCPを介すことでAWS SDKの複雑さを回避できるので、非開発者でも扱いやすいのが大きな利点です。


■ 関連キーワード

  • VBA S3 アップロード
  • WinSCP S3 接続
  • WinSCP スクリプト 自動実行
  • VBA AWS バッチ連携
  • S3 自動化 ファイル転送
  • WinSCP シークレットキー パイプ