ホワイトレンド

きあいのタスキ

【GPT-5】VBAのworkbookでSharePoint上にブックを保存したい

なるほど!VBASharePoint上にWorkbookを保存する方法ですね。
いくつか方法がありますが、環境(クラシックなSharePointか、OneDrive/SharePoint Onlineか)やアクセス方法(ユーザーが既にサインイン済みか、認証が必要か)によって使い分ける必要があります。


1. すでにエクスプローラーからアクセスできる場合(おすすめ)

もしSharePointエクスプローラーに「ネットワークドライブ」や「同期フォルダ(OneDrive)」としてマッピングされている 場合は、通常のファイル保存と同じ書き方でOKです。

 

Sub SaveToSharePoint()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    ' SharePointのパス(例:同期済みフォルダ)
    Dim spPath As String
    spPath = "C:\Users\username\SharePoint\Documents\test.xlsx"
    
    wb.SaveAs Filename:=spPath, FileFormat:=xlOpenXMLWorkbook
End Sub

 

👉 この場合はローカル同期が効いているので、特別な認証処理は不要です。


2. SharePoint Online の URL を直接指定する場合

SharePointのライブラリURLを使って保存することも可能です。
(ただし、ユーザーがOfficeにサインインしている必要あり)

 

Sub SaveToSharePointURL()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    
    ' SharePointのURL(例:ドキュメントライブラリ直下)
    Dim spUrl As String
    spUrl = "https://yourtenant.sharepoint.com/sites/yoursite/Shared Documents/test.xlsx"
    
    wb.SaveAs Filename:=spUrl, FileFormat:=xlOpenXMLWorkbook
End Sub

 

👉 これで動作するのは、ExcelがユーザーのアカウントでSharePointに接続できている場合です。
(普段から「ファイル → 開く」でSharePointのファイルを開けるなら大丈夫)


3. VBAで直接アップロードする(XMLHTTPを使う)

もし 直接PUTリクエストでアップロードしたい 場合は、MSXML2.XMLHTTP を使います。
ただしこの場合は アクセストークンが必要 になります。SharePoint REST APIを叩くので、認証処理を実装しないといけません。

例(疑似コード):

 

Sub UploadFileToSharePoint()
    Dim http As Object
    Dim filePath As String, spUrl As String
    Dim fileBytes() As Byte
    
    filePath = "C:\temp\test.xlsx"
    spUrl = "https://yourtenant.sharepoint.com/sites/yoursite/Shared Documents/test.xlsx"
    
    ' 認証済みのアクセストークンが必要
    Dim accessToken As String
    accessToken = "Bearer xxxxxxx"
    
    ' ファイルをバイナリ読み込み
    Open filePath For Binary As #1
    ReDim fileBytes(LOF(1) - 1)
    Get #1, , fileBytes
    Close #1
    
    ' HTTPリクエストでアップロード
    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "PUT", spUrl, False
    http.setRequestHeader "Authorization", accessToken
    http.send fileBytes
End Sub

 

👉 この方法は難易度高め。通常の業務であれば ①か② の方法が現実的です。


✅ まとめ

  • SharePoint同期フォルダ経由 で使えるなら、普通に SaveAs で保存できる

  • URL指定も可能(ただしOfficeにサインインしている必要あり)

  • REST API経由だと アクセストークンが必須