Excel

【Excel】VBAマクロでエラー無視(ループ・実行・続行、後でまとめて表示:中断しないなど)する方法

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

この記事では、VBAマクロでエラー無視(ループ・実行・続行、後でまとめて表示:中断しないなど)する方法、について解説していきます。

ポイントとしては、

`OnError`,

`FileSystemObject`,

`WorksheetFunction`

を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいように、変数名を少々変わった名称にしています。

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

VBAマクロでエラー無視(ループで実行・続行)する方法

それではまず、VBAマクロでエラーを無視し、ループで実行・続行する方法について解説していきます。

以下コードでは、

・元となるリストに記載のcsvを元に

・指定フォルダ内のすべてのcsvをリストに基づいて読み込んでいき、A列の合計値を最終行に表示し保存、該当csvがない場合はエラー処理としてそのまま続行とする

といった処理になっております。

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

Sub ErrorIgnoreLoop()
    ' 変数の宣言
    Dim keisokuhyo As String
    Dim hensuu As Workbook
    Dim shorihyo As Worksheet
    Dim kensu As Long
    Dim goukei As Double
    
    ' エラー時の処理を設定
    On Error Resume Next
    
    ' CSVファイルのリストを読み込む
    Set hensuu = Workbooks.Open("CSVリストのパス")
    Set shorihyo = hensuu.Sheets(1)
    kensu = shorihyo.Cells(shorihyo.Rows.Count, 1).End(xlUp).Row
    
    ' 各CSVファイルを処理
    For i = 1 To kensu
        keisokuhyo = shorihyo.Cells(i, 1).Value
        If Dir(keisokuhyo) <> "" Then
            With Workbooks.Open(keisokuhyo)
                goukei = Application.WorksheetFunction.Sum(.Sheets(1).Range("A:A"))
                .Sheets(1).Cells(.Sheets(1).Rows.Count, 1).End(xlUp).Offset(1, 0).Value = goukei
                .Close SaveChanges:=True
            End With
        End If
    Next i

    ' エラー処理を終了
    On Error GoTo 0
    
    ' CSVリストを閉じる
    hensuu.Close SaveChanges:=False
End Sub

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

このコードでは、指定されたCSVファイルリストに基づいて、各CSVファイルを開き、A列の値の合計を計算し、その合計を最終行に追加して保存します。

ファイルが見つからない場合でもエラーを無視し、次のファイル処理を続行します(中断しない)。

 

VBAマクロでエラー無視し、そのファイルを後でまとめて表示する方法

続いては、VBAマクロでエラーを無視しつつ、エラーが発生したファイル名を別のCSVに記載し保存する方法について解説していきます。

コードは以下の通りです。

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

Sub ErrorLogToFile()
    ' 変数の宣言
    Dim keisokuhyo As String
    Dim hensuu As Workbook
    Dim shorihyo As Worksheet
    Dim kensu As Long
    Dim logBook As Workbook
    Dim logSheet As Worksheet
    Dim logRow As Integer
    Dim csvFile As Workbook
    Dim csvSheet As Worksheet
    Dim sumValue As Double

    ' エラーログ用のワークブックを新規作成
    Set logBook = Workbooks.Add
    Set logSheet = logBook.Sheets(1)
    logRow = 1

    ' エラー時の処理を設定
    On Error Resume Next

    ' CSVファイルのリストを読み込む
    Set hensuu = Workbooks.Open("CSVリストのパス")
    Set shorihyo = hensuu.Sheets(1)
    kensu = shorihyo.Cells(shorihyo.Rows.Count, 1).End(xlUp).Row

    ' 各CSVファイルを処理
    For i = 1 To kensu
        keisokuhyo = shorihyo.Cells(i, 1).Value
        If Dir(keisokuhyo) <> "" Then
            Set csvFile = Workbooks.Open(keisokuhyo)
            Set csvSheet = csvFile.Sheets(1)

            ' A列の合計を計算し、最終行の次に格納
            sumValue = Application.WorksheetFunction.Sum(csvSheet.Range("A:A"))
            csvSheet.Cells(csvSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = sumValue

            ' ファイルを保存して閉じる
            csvFile.Close SaveChanges:=True
        End If

        ' エラーが発生した場合の処理
        If Err.Number <> 0 Then
            logSheet.Cells(logRow, 1).Value = keisokuhyo
            logRow = logRow + 1
            Err.Clear
        End If
    Next i

    ' エラーログを保存
    logBook.SaveAs "エラーログの保存先パス"
    logBook.Close

    ' エラー処理を終了
    On Error GoTo 0

    ' CSVリストを閉じる
    hensuu.Close SaveChanges:=False
End Sub

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

このコードでは、エラーが発生した際にそのファイル名を別のCSVファイルに記録し、最後にその情報を保存します。

また、エラーでない場合には、各CSVファイルのA列の合計値を最終行に追加する集計も同時に行うコードとなっております!

 

まとめ VBAマクロでエラー無視(実行・続行、後でまとめて表示:中断しないなど)する方法

この記事では、VBAマクロでエラー無視(ループ・実行・続行、後でまとめて表示:中断しないなど)する方法について確認しました。

マクロをマスターしもっと効率よく過ごしていきましょう(^^)/