私は、Sharepoint サーバー上のフォルダーにある何千もの Excel ワークブック (現在は約 14000) にわたってデータ セットが保存されているプロジェクトに取り組んでいます。各ワークブックは、そのワークブックのデータ サブセットへの変更を反映するために定期的に変更されます。このデータを保存して更新するのは良い方法ではないことはわかっていますが、それが現状です。
フォルダー内のすべてのワークブックから 1 つまたは複数のフィールドの内容を抽出するさまざまなクエリを実行する必要があります。私は次のように一連のワークブックを反復処理することでこれを行ってきました。
Function getData() As Workbook
Dim resultBk As Workbook
Dim fldr As Folder
Dim fso As New FileSystemObject
Dim fileObj As File
Dim filePath As String
Dim queryBk As Workbook
'create a workbook for storing the query results
Set resultBk = Workbooks.Add(resultBkTemplatePath)
'get the folder with all the workbooks to be queried
Set fldr = fso.GetFolder(sharepointFolderPath)
For Each fileObj In fldr.Files
'try opening each of the workbooks
Set queryBk = Workbooks.Open(fileObj.Path, ReadOnly:=True)
'get data from queryBk and add it to resultBk, or add a row with an error message if queryBk failed to open
addBkDataToResults resultBk, queryBk
queryBk.Close False
Set queryBk = Nothing
Next
getData = resultBk
End Function
SharePoint 接続を介して非常に多くのワークブックを開いたり閉じたりするこのプロセスは非常に時間がかかります。通常、完全なクエリを実行するには 12 ~ 14 時間かかります。Excelブックを開いたり閉じたりする必要のないデータを高速に読み取る方法はありますか? または、開閉プロセスを処理してこれを高速化する方法はありますか?