@frswataru (本石 渉)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

vba 転記  高速化したい

解決したいこと

任意のフォルダーにある複数のExcelブックのセルの値を一つExcelブックに集計するコードです。
実行したところかなり処理時間が掛かります。処理時間を短縮する方法をご教示お願いします。

該当するソースコード

Private Sub CommandButton1_Click()

'_________________________変数の宣言1'_________________________

'フォルダの場所を変数に入れる
    Dim Folder_path
    Folder_path = ThisWorkbook.Path & "\保存データ"
'集計するブックを変数に入れる
    Dim ImportWorkbook
    ImportWorkbook = Dir(Folder_path & "\*サブ*.xlsx")

  Dim startTime As Double
  Dim endTime As Double
  Dim processTime As Double





'_________________________コピペ処理の実行'_________________________


'開始時間取得
  startTime = Timer

'指定したフォルダから、Excelファイルを探す
Application.ScreenUpdating = False              '画面の描画更新を停止する

    Do Until ImportWorkbook = ""
        Workbooks.Open filename:=Folder_path & "\" & ImportWorkbook

        Dim ImportWorkbook_data  '集計するブック内のシートのデータ数
        Dim ThisWorkbook_data  '集計先のシートのデータ数

        Dim WO, PJ, Process, Bed As String




             'ベット作業用

            ThisWorkbook_data = ThisWorkbook.Worksheets("CT2").Range("a" & Rows.Count).End(xlUp).Row



             'Bed
            Bed = Workbooks(ImportWorkbook).Worksheets("ベット作業用").Range("C5")
            ThisWorkbook.Worksheets("CT2").Range("d" & ThisWorkbook_data + 1) = Bed





'            閉じる
            '集計するブックを
        Application.DisplayAlerts = False
            Workbooks(ImportWorkbook).Close
        Application.DisplayAlerts = True

'次のファイルを探しに行く
        ImportWorkbook = Dir()
    Loop


Application.ScreenUpdating = True                  '画面の描画更新を有効にする

'終了時間取得
  endTime = Timer

  '処理時間表示
  processTime = endTime - startTime
  MsgBox "処理時間:" & processTime



End Sub


例)

def greet
  puts Hello World
end

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0 likes

2Answer

掲載していただいているコードを眺める限りは特別改善できそうなところはないです。強いて言えば

  • Range()→Cells()書き換え
  • ループごとに最終行の取得→ループ前に取得してループごとに+1に変更

ぐらいでしょうか。

ただ、そもそも他のブックを開く処理は、VBAだろうと普通にエクスプローラからダブルクリックして開こうとそう時間は変わらないくらい遅いので、そこを別のスクリプトで高速化するのは有効な手だとは思います。

1Like

Comments

  1. @frswataru

    Questioner

    煮詰まっちゃたんですよね。
    pythonで検討してみます。

他に方法があるとすればリンクテーブルぐらい?
あとはPythonで作るとか?

1Like

Comments

  1. @frswataru

    Questioner

    煮詰まっちゃたんですよね。
    pythonで検討してみます。

Your answer might help someone💌