Excel

【Excel】VBAマクロで処理が終わるまで待機(doevents:sleep:終わるまで一時停止:前の処理が終わったら:計算完了したら:処理が間に合わない)する方法

当サイトでは記事内に広告を含みます

この記事では、VBAマクロで処理が終わるまで待機(終わるまで一時停止:前の処理が終わったら:計算完了したら:処理が間に合わない)する方法、について解説します。

ポイントとしては

`DoEvents`と

`Application.Wait`

の使用が挙げられます。

なお、解説では完全な初心者でも理解しやすいよう、変数名を少々変わった名称で表現しています。

それでは詳しく見ていきましょう!

VBAマクロで処理が終わるまで待機(終わるまで一時停止:前の処理が終わったら:計算完了したら:処理が間に合わない)する方法:

それではまず、VBAマクロで処理が終わるまで待機する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。

以下では、すべてのシートの各列の合計を最終行の次に表示させ、その後にファイルを保存する。保存の処理は計算が完了するまで待つようにするサンプルとしています。


Sub MachiHouhou()
    Dim ws As Worksheet
    Dim col As Integer

    For Each ws In ThisWorkbook.Worksheets
        For col = 1 To ws.UsedRange.Columns.Count
            ws.Cells(ws.Rows.Count, col).End(xlUp).Offset(1, 0).Formula = "=SUM(" & ColLetter(col) & ":" & ColLetter(col) & ")"
        Next col
    Next ws

    DoEvents
    Application.Wait Now + TimeValue("00:00:05")
    ThisWorkbook.Save
End Sub

Function ColLetter(colNum As Integer) As String
    ColLetter = Split(Cells(1, colNum).Address, "$")(1)
End Function

コードのAlt+F8を押し、マクロ選択画面で`MachiHouhou`関数を実行します。

このコードは、すべてのシートの使用されている各列について、最終行の次にその列の合計を表示し、5秒間の待機時間を設けた後にファイルを保存します。

`DoEvents`は他の操作を可能にしつつ待機させ、`Application.Wait`は指定した時間だけマクロの実行を停止します。

 

VBAマクロで前の処理が終わったら対応する方法

続いては、VBAマクロで前の処理が終わったら対応する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下のコードをコピペしましょう。


Sub TsugiNoHouhou()
    Dim sourcePath As String
    Dim destPath As String
    Dim fileName As String
    Dim combinedWB As Workbook
    Dim combinedWS As Worksheet
    Dim sourceWB As Workbook
    Dim sourceWS As Worksheet

    sourcePath = "C:\source_folder\" ' ソースフォルダのパス
    destPath = "C:\dest_folder\"    ' コピー先のフォルダのパス
    Set combinedWB = Workbooks.Add
    Set combinedWS = combinedWB.Sheets(1)

    fileName = Dir(sourcePath & "*.xls*")
    Do While fileName <> ""
        Set sourceWB = Workbooks.Open(sourcePath & fileName)
        Set sourceWS = sourceWB.Sheets(1)
        sourceWS.Copy After:=combinedWS
        sourceWB.Close False
        fileName = Dir()
    Loop

    combinedWB.SaveAs destPath & "CombinedWorkbook.xlsx"
    combinedWB.Close

    DoEvents
End Sub

コードのAlt+F8を押し、マクロ選択画面で`TsugiNoHouhou`関数を実行します。

このコードは、指定されたディレクトリ内のすべてのExcelファイルを開き、それぞれのファイルの最初のシートを新しいワークブックにコピーします。

最終的に、すべてのシートが1つのワークブックに結合され、別のディレクトリに保存されます。`DoEvents`を使用して、プログラムが応答しなくなることを防ぎます。

 

まとめ VBAマクロで処理が終わるまで一時停止:前の処理が終わったら:計算完了したら:処理が間に合わない時の対策方法

この記事では、VBAマクロで処理が終わるまで待機(終わるまで一時停止:前の処理が終わったら:計算完了したら:処理が間に合わない)する方法について確認しました。

マクロは使えると本当便利ですのでこの機会にマスターしていきましょう!!!