SharePointは社内ファイル共有やチームでの情報管理に便利なツールですが、フォルダ内のファイルを手動で確認・整理するのは意外と手間がかかります。特に大量のファイルが存在する場合、一つひとつ確認するのは非効率です。そんな時に役立つのが、VBA(Visual Basic for Applications)を使った自動化です。
この記事では、SharePoint上のフォルダに格納されたファイル一覧をVBAで取得する方法について、手順と実際のコードを交えてわかりやすく解説します。Microsoft Excelを使った実用的な自動化ツールとして、初心者の方にもすぐに試せる内容となっています。
SharePointはWebベースのサービスであるため、通常のネットワークドライブとは扱い方が異なります。しかし、SharePointのフォルダをエクスプローラーから開ける状態(いわゆるWebDAVでマウント)にしていれば、VBAからも通常のフォルダとしてアクセスが可能になります。
つまり、**前提として「SharePointフォルダをWindowsのネットワークドライブとして割り当てる」か「UNCパスでアクセス可能な状態にしておく」**ことが必要です。
まずは以下の手順で、SharePointのフォルダをWindowsエクスプローラーで開けるようにします。
ここで得られるパス(例:\\会社名.sharepoint.com@SSL\sites\チーム名\共有ドキュメント\フォルダ名
)が、VBAで使う対象フォルダパスとなります。
以下に、指定フォルダ内のファイル名一覧を取得し、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 ' 最終更新日
列を増やし、以下のように見やすく整えると、一覧表としての完成度も上がります。
VBAを使えば、SharePointフォルダのファイル一覧を自動で取得し、業務効率を大幅に改善することができます。ポイントは以下のとおりです。
Dir
関数またはFileSystemObjectを使ってファイルを取得することぜひ実務に活かして、日々の作業を効率化してみてください。