SharePointサイト内のExcelワークブックをVBA(マクロ)で取得

SharePointサイト内のExcelワークブックをマクロで取得する

Microsoft365の環境から社内の環境にデータを転送できますか?
クラウド上で加工したExcelを社内の共有サーバーに出力したいです。



ゲートウェイを使えばクラウド環境と社内環境の接続自体は可能です。
セットアップや管理は大抵の場合社内のIT部門の協力が必要です。



自力でなんとかするのは無理なんですね。
ひとまず会社のIT部門に相談しようかな・・・?



ExcelVBAを起点にする方法であればできないこともないです。
マクロでクラウド環境から社内環境へデータを転送しましょう。
画像のようなイメージでExcelVBAを使ってクラウド環境から.xlsxファイルを社内環境に取り出します。


興味がある方はこのまま記事を読み進めてください。すぐに方法を知りたい方はこちらをご覧ください。
関連記事
本記事のベースとなる記事です。Excel本体ではなく中身のデータを取得したい方はこちらをご覧ください。
SharePointについて知りたい方はこちらの記事をご覧ください。
SharePointのチームサイトの作り方はこちらで説明しています。
関連書籍
ExcelVBAに慣れている方はこちらの書籍をご覧ください。(おすすめは電子書籍です)
SharePointの使い方をマスターしたい方はこちらの書籍をご覧ください。(おすすめは電子書籍です)
なぜPowerAutomateを使って社内環境にデータを転送できないのか?
まずは冒頭の画像でバツが付いていたルートについて解説します。
なぜPowerAutomateは社内環境にアクセスできないのか?を説明します。
一般的にクラウド環境から社内環境へのアクセスは制限されていることが多い為
前提としてそれぞれ成り立ちが違うので互いの環境には簡単にアクセスできないように設計されています。
そんな中でも一般的には社内環境からクラウド環境へのアクセスは容易であることが多いです。
反対にクラウド環境から社内環境へのアクセスは制限されていることが多いです。
よってPowerAutomate(クラウド)から社内環境へのアクセスは難しいという事になります。



PowerAutomateのフローを使った場合でもアクセスが制限されます。
「手動じゃなくて自動なら大丈夫」というわけでなないです。
なぜクラウド環境から社内環境へのアクセスは制限されているの?
回答はこちらです。
セキュリティ面で考えた時に理にかなっているから
分かりやすく説明する為に「手紙」を使った事例を用意しました。
自分の家を社内環境、自分の家以外をクラウド環境と想定し以下枠の中を読んでみてください。
- 社内環境→クラウド環境 ・・・ 家(社内)から出てポスト(クラウド)に手紙を出すのは簡単
- クラウド環境→社内環境 ・・・ 配達に来る人は家(社内)には入れず手紙をポストへ投函する
社内環境→クラウド環境へのアクセスは自分次第です。比較的簡単にアクセス可能です。
反対にクラウド環境→社内環境は直接アクセスできません。配達員は家に入れずポスト投函までが仕事です。
ネット空間でも同様の事例が多く基本的には外からのアクセスに関所を持つようになっています。
参考:オンプレミス環境
ここで言う「社内環境」というのはオンプレミス環境と言われることがあります。
オンプレミス(英語: on-premises)とは、サーバやソフトウェアなどの情報システムを、使用者が管理している施設の構内に機器を設置して運用することをいう。プレミス(premise)は「構内」「店内」の意味。 「自社運用」ともいう[1]。プレミス、OnPと表記されることもある。
Wikipedia:オンプレミスから抜粋



「オンプレ」と言う人も居ますが一般ユーザーには分かりにくいです。
会話時には「社内環境」を使うことをおすすめします。
ExcelVBA(マクロ)とは
ExcelVBA(マクロ)について知りたい方はこちらのサイトをご覧ください。
クラウド環境から.xlsxファイルを取り出す方法
この方法であればクラウド環境のデータを社内環境に保存することができます。
社内環境からExcelVBAでクラウド環境にあるExcelデータを開き社内環境に保存する
さらに具体的に説明します。以下仕事の流れをご覧ください。
クラウド環境にある対象の.xlsxファイルにアクセス
Openメソッドで.xlsxファイルを開く(デスクトップアプリで開きます)
社内環境にある任意のフォルダを指定しSaveAsメソッドでファイルを保存する
クラウド環境から社内環境へファイルを転送する事と同じ状態を別の方法で実現させています。
加えて社内環境からクラウド環境の方がアクセスが容易なところも狙って作業を考えました。



実際に各環境間ではデータを移動させていません。
しかし求めている結果を得る事ができています。
環境
用意した作業環境はこちらです。画像のような環境を用意します。
- Microsoft365の環境内にSharePointのチームサイトを用意する
- チームサイトのドキュメントフォルダに.xlsxファイルを1つ用意する
- 社内環境の共有サーバー内のフォルダを指定する(.xlsxを保存する場所を決める)


作業内容
作業内容は上のブロックで提示した3Stepです。
コード
コードはこちらです。
11行目から19行目の間にあるパスに関する情報だけ書き換えてもらえばコードは転用可能です。
Sub SharePointサイト内のExcelファイルを社内の共有フォルダに保存()
Dim pth As String ' SharePointのフォルダパス
Dim fle As String ' ファイル名
Dim wb As Workbook ' ワークブック
Dim savePath As String ' 保存先のパス
Application.ScreenUpdating = False '画面更新の停止
Application.DisplayAlerts = False 'アラートの停止
'***************************************************************************************
pth = "https://(ユーザーの環境).sharepoint.com/sites/(サイト名)/Shared%20Documents/General/"
fle_1 = "8000.xlsx" 'ファイル名は好きな名前に変えてください
savePath = "ユーザーの社内環境" '最後に/を忘れないように
fle_2 = "8.xlsx" 'ファイル名は好きな名前に変えてください
'***************************************************************************************
' 対象の.xlsxファイルを開く
Workbooks.Open Filename:=pth & fle_1, ReadOnly:=True
'対象の.xlsxファイルを変数に格納
Set wb = ActiveWorkbook
' 任意の場所に名前を付けて保存(ファイル形式はExcelワークブックを指定)
wb.SaveAs Filename:=savePath & fle_2, FileFormat:=xlOpenXMLWorkbook
' 対象の.xlsxファイルを閉じる(保存は不要)
wb.Close SaveChanges:=False
'***************************************************************************************
Application.DisplayAlerts = True '画面更新の再開
Application.ScreenUpdating = True 'アラートの復帰
MsgBox "作業完了", vbInformation, "完了"
End Sub
結果
上記コードを実行すると社内環境の指定したパスに8.xlsxという名前のファイルが作成されます。
SharePointサイトのドキュメントフォルダに配置した8000.xlsxという名前のファイルをコピーしています。
解説
ほとんどコードの中にコメントとして書いたのであまり説明することは無いのですが1点だけ説明します。
コピーして使ってもらう時にファイルパスに関する知識が必要になります。こちらの記事で説明しています。





リンク先の記事を見ました。
画像がたくさんあるので視覚で理解することができました。
まとめ
SharePointサイト内のExcelワークブックを社内環境に展開する方法を解説しました。
実際は「SharePointサイトにあるExcelを開き任意の場所に名前を付けて保存をする」という作業です。
本来やりたい事とは違いますがこのように少し切り口を変えると似たようなことが出来ます。
皆様の勤務されている会社の環境次第ですが考え方次第では課題を解決させることができるかもしれませんよ。
マクロを習得すると様々なメリットがあります
今回は1つのデータを1つの場所にコピーするという事例でした。比較的簡単な作業です。
マクロを習得するともっと色々なことができるようになります。(少しだけ例を紹介します)
- 手数が多すぎて諦めている作業を数秒で片付けることができる
- 複数のデータを複数の場所に転送
- WebスクレイピングでWeb空間から情報を取得する
一度マクロを習得してしまえば毎日定時で楽々帰ることができるようになりますよ。
興味がある方はこちらのサイトで勉強してみてください。

