Sub FolderScript() Dim strPath As String, i As Long strPath = Range("B2").Value Range("B3").Select i = 3 Fileshow strPath, i End Sub Public Sub Fileshow(strPath, i) Dim objFso As Object, objFolder As Object, objFile As Object Dim objSub As Object, ws As Worksheet Dim strList() As String Dim rr As Range Dim bb Dim y As Integer Dim col As Integer Dim oFile As Object Set ws = ThisWorkbook.Worksheets("FileList") Set objFso = CreateObject("scripting.Filesystemobject") Set objFolder = objFso.GetFolder(strPath) Application.ScreenUpdating = False For Each objFile In objFolder.Files ws.Cells(i, 2) = objFso.GetBaseName(objFile.Path) ws.Cells(i, 2).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=objFile.Path, TextToDisplay:=objFile.Name ws.Cells(i, 3) = objFile.Type ws.Cells(i, 4) = Int(objFile.Size / 1024) ws.Cells(i, 5) = objFile.DateCreated ws.Cells(i, 6) = objFile.DatelastAccessed ws.Cells(i, 7) = objFile.DateLastModified ws.Cells(i, 8) = objFile.ParentFolder.Path For Each rr In ws.Cells(i, 8).Rows bb = Split(rr, "\") col = 9 For y = 1 To UBound(bb) Cells(rr.Row, col) = bb(y) col = col + 1 Next y i = i + 1 Next rr Next For Each objSub In objFolder.SubFolders Fileshow objSub.Path, i Next End Sub コード ```Excel VBAを使ってファイルリスト作成をおこなっています。 現在の課題は、5万ファイルに及ぶ大規模なリスト作成のためにこのマクロコードを使うと リスト作成の完了までおよそ4時間くらいかかってしまうため、この所要時間を2時間くらいまで短縮化したいと思っています。 要望 ファイルリストの作成VBAをもっと高速にする方法を教えてください。 よろしくアドバイスをお願いいたします。 Sub FolderScript() Dim strPath As String, i As Long strPath = Range("B2").Value Range("B3").Select i = 3 Fileshow strPath, i End Sub Public Sub Fileshow(strPath, i) Dim objFso As Object, objFolder As Object, objFile As Object Dim objSub As Object, ws As Worksheet Dim strList() As String Dim rr As Range Dim bb Dim y As Integer Dim col As Integer Dim oFile As Object Set ws = ThisWorkbook.Worksheets("FileList") Set objFso = CreateObject("scripting.Filesystemobject") Set objFolder = objFso.GetFolder(strPath) Application.ScreenUpdating = False For Each objFile In objFolder.Files ws.Cells(i, 2) = objFso.GetBaseName(objFile.Path) ws.Cells(i, 2).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=objFile.Path, TextToDisplay:=objFile.Name ws.Cells(i, 3) = objFile.Type ws.Cells(i, 4) = Int(objFile.Size / 1024) ws.Cells(i, 5) = objFile.DateCreated ws.Cells(i, 6) = objFile.DatelastAccessed ws.Cells(i, 7) = objFile.DateLastModified ws.Cells(i, 8) = objFile.ParentFolder.Path For Each rr In ws.Cells(i, 8).Rows bb = Split(rr, "\") col = 9 For y = 1 To UBound(bb) Cells(rr.Row, col) = bb(y) col = col + 1 Next y i = i + 1 Next rr Next For Each objSub In objFolder.SubFolders Fileshow objSub.Path, i Next End Sub
コードはマークダウンのコードブロックに入れてください。
```vba
ここにコードを記述
```
セル書き込みとセル選択がループ1回毎に約10回行われています。
描画をオフにしているとはいえ、5万回×10回のセル書き込みとセル選択が行われていることが遅い原因です。
仮に1回のセル書き込みが20msであったとしても、50万回も行われれば3時間はかかりますね。
ご指摘ありがとうございます。そのとうりです
例えば全ての情報を取得後にセル書き込みを1回だけで済ますコードの案があればもっと早くなるかと思うのですが、もし方策がありましたら是非アドバイス願います。
一度CSVに書き込んで、そのCSVをExcelにインポートするのは如何でしょう?
回答5件
あなたの回答
tips
プレビュー