
初心者です。
ExcelのVBAで特定のフォルダをサブデータまでリンクを付けた状態で抽出するコードを書いたのですが
処理が20分くらいかかっているので処理速度を上げたいです。
(反映すると大体5000行程度)
ネットで調べて
・自動計算をしない
・描画をしない
・イベントの抑止
までやってみたた結果での20分です。
全く知識がない状態で全部ネットで拾ってきたコードなので何が遅くなっているのかもわからない状態なのでお知恵を拝借したく
以下コードの内容です
Public findPath As String Sub フォルダ取得() With Application .Calculation = xlCalculationManual '計算を手動に .EnableEvents = False 'イベントを抑止 .ScreenUpdating = False '画面描画を停止 End With Dim fso As Object Dim cf As Variant Dim oRow, oCol As Integer findPath = "フォルダのリンク先 '←取得したいフォルダパスを指定する oRow = 3 '←出力開始の行を指定 oCol = 2 '←出力開始の列を指定 '指定フォルダを出力 Cells(oRow, oCol) = findPath ActiveSheet.Hyperlinks.Add anchor:=Cells(oRow, oCol), Address:=findPath Set fso = CreateObject("Scripting.FileSystemObject") Set cf = fso.GetFolder(findPath) 'フォルダ全探査 Call GetSubFolder(cf, oRow + 1, oCol) End Sub '=============================================================================== ' フォルダ単位で全探査 '=============================================================================== Sub GetSubFolder(cf, oRow, oCol) 'ファイル出力処理 For Each f In cf.Files fLevel = UBound(Split(Replace(f.Path, findPath, ""), "\")) Cells(oRow, oCol + fLevel) = f.Name Call lineDraw(oRow, oCol, fLevel) '罫線を引く ActiveSheet.Hyperlinks.Add anchor:=Cells(oRow, fLevel + oCol), Address:=f.Path 'ハイパーリンク化 oRow = oRow + 1 Next 'サブフォルダ処理 For Each f In cf.SubFolders fLevel = UBound(Split(Replace(f.Path, findPath, ""), "\")) Cells(oRow, oCol + fLevel) = f.Name Call lineDraw(oRow, oCol, fLevel) '罫線を引く ActiveSheet.Hyperlinks.Add anchor:=Cells(oRow, fLevel + oCol), Address:=f.Path 'ハイパーリンク化 oRow = oRow + 1 Call GetSubFolder(f, oRow, oCol) '再帰呼出 Next End Sub Sub lineDraw(oRow, oCol, fLevel) '罫線を引く For i = oCol + fLevel - 1 To oCol Step -1 If i = oCol + fLevel - 1 Then Cells(oRow, i) = ChrW(&H23BF) Else Cells(oRow, i) = "│" End If Cells(oRow, i).HorizontalAlignment = xlCenter Next With Application .Calculation = xlCalculationAutomatic '計算を自動に' .EnableEvents = True 'イベントを再開' .ScreenUpdating = True '画面描画を開始' End With End Sub
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー