この記事では、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マクロでエラー無視(ループ・実行・続行、後でまとめて表示:中断しないなど)する方法について確認しました。
マクロをマスターしもっと効率よく過ごしていきましょう(^^)/