VBAでSharePointのファイル一覧を取得する方法|業務効率を上げる自動化スクリプト

SharePointは社内ファイル共有やチームでの情報管理に便利なツールですが、フォルダ内のファイルを手動で確認・整理するのは意外と手間がかかります。特に大量のファイルが存在する場合、一つひとつ確認するのは非効率です。そんな時に役立つのが、VBA(Visual Basic for Applications)を使った自動化です。
この記事では、SharePoint上のフォルダに格納されたファイル一覧をVBAで取得する方法について、手順と実際のコードを交えてわかりやすく解説します。Microsoft Excelを使った実用的な自動化ツールとして、初心者の方にもすぐに試せる内容となっています。


SharePointのファイル一覧取得の基本的な考え方

SharePointはWebベースのサービスであるため、通常のネットワークドライブとは扱い方が異なります。しかし、SharePointのフォルダをエクスプローラーから開ける状態(いわゆるWebDAVでマウント)にしていれば、VBAからも通常のフォルダとしてアクセスが可能になります。

つまり、**前提として「SharePointフォルダをWindowsのネットワークドライブとして割り当てる」か「UNCパスでアクセス可能な状態にしておく」**ことが必要です。


事前準備:SharePointをエクスプローラーで開ける状態にする

まずは以下の手順で、SharePointのフォルダをWindowsエクスプローラーで開けるようにします。

  1. SharePointサイトにアクセス
  2. 対象のドキュメントライブラリを表示
  3. 上部メニューから「…」→「エクスプローラーで表示」を選択
  4. ネットワークドライブとして割り当てたい場合は、「このフォルダーをネットワークドライブに割り当て」を実行

ここで得られるパス(例:\\会社名.sharepoint.com@SSL\sites\チーム名\共有ドキュメント\フォルダ名)が、VBAで使う対象フォルダパスとなります。


VBAでSharePointフォルダのファイル一覧を取得する基本コード

以下に、指定フォルダ内のファイル名一覧を取得し、Excelシートに出力するVBAコードを紹介します。

Sub GetSharePointFileList()

Dim folderPath As String
Dim fileName As String
Dim row As Long

' SharePointフォルダのパス(ネットワークドライブまたはUNCパス)
folderPath = "\\会社名.sharepoint.com@SSL\sites\チーム名\共有ドキュメント\サブフォルダ名\"

If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

' 最初の行
row = 2
fileName = Dir(folderPath)

' ヘッダー
Cells(1, 1).Value = "ファイル名"
Cells(1, 2).Value = "フルパス"

' ファイル名の取得ループ
Do While fileName <> ""
If GetAttr(folderPath & fileName) <> vbDirectory Then
Cells(row, 1).Value = fileName
Cells(row, 2).Value = folderPath & fileName
row = row + 1
End If
fileName = Dir
Loop

MsgBox "完了しました。", vbInformation

End Sub

フォルダ内のサブフォルダも含めて取得したい場合

上記のコードは「指定フォルダの直下」にあるファイルしか取得しません。サブフォルダを含めてすべてのファイルを再帰的に取得したい場合は、以下のような再帰関数を使います。

Sub GetAllFilesInSharePointFolder()
Dim folderPath As String
folderPath = "\\会社名.sharepoint.com@SSL\sites\チーム名\共有ドキュメント\"

' ヘッダー行
Cells(1, 1).Value = "ファイル名"
Cells(1, 2).Value = "パス"

' 実行
ListFiles folderPath, 2
MsgBox "完了しました。"
End Sub

Sub ListFiles(ByVal folderPath As String, ByRef row As Long)
Dim fso As Object
Dim folder As Object
Dim file As Object
Dim subfolder As Object

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FolderExists(folderPath) Then Exit Sub
Set folder = fso.GetFolder(folderPath)

' ファイル一覧を取得
For Each file In folder.Files
Cells(row, 1).Value = file.Name
Cells(row, 2).Value = file.Path
row = row + 1
Next file

' サブフォルダも再帰的に処理
For Each subfolder In folder.SubFolders
ListFiles subfolder.Path, row
Next subfolder
End Sub

ファイル情報をもっと詳しく取得する方法(サイズ・更新日など)

上記のコードに少し手を加えれば、ファイルサイズや最終更新日といった情報も取得可能です。

Cells(row, 3).Value = file.Size ' ファイルサイズ(バイト)
Cells(row, 4).Value = file.DateLastModified ' 最終更新日

列を増やし、以下のように見やすく整えると、一覧表としての完成度も上がります。


エラーが出る場合の対処法

  • 「アクセスできない」エラー:SharePointパスが正しくマウントされているか、Explorerで一度開いてみましょう。
  • 「ファイルが見つからない」:パスの末尾に「\」がついているか確認してください。
  • ファイル数が多すぎて遅い:サブフォルダを除く or 一部のファイルだけ取得する工夫が必要です。

まとめ

VBAを使えば、SharePointフォルダのファイル一覧を自動で取得し、業務効率を大幅に改善することができます。ポイントは以下のとおりです。

  • SharePointフォルダをエクスプローラーでアクセス可能にしておくこと
  • Dir関数またはFileSystemObjectを使ってファイルを取得すること
  • サブフォルダまで含めたい場合は再帰処理を使うこと

ぜひ実務に活かして、日々の作業を効率化してみてください。

タイトルとURLをコピーしました