【VBA】無限ループの対策はこれで完璧?VBA初心者でも対応できる回避テクニックをご紹介
あ、また固まった。。。
マクロを使っていると、こんな経験はありませんか?
この固まる問題は、VBAの無限ループ処理が原因かもしれません。
こんな無限ループ問題は
VBAコードを適切に改善すればすぐに解決
することが可能です。
この記事では、緊急時の対処法から根本的な予防策まで、実際のコード例とともに分かりやすく解説します。
VBA無限ループが発生する3つの主要原因とは?
VBAで無限ループが発生する原因は大きく3つに分類されます。
- For文、Do文の繰り返し処理の設定ミス
- 変数の更新忘れ
- 入れ子構造での抜け条件設定ミス
これらの原因を理解することで、問題の根本的な解決と予防が可能になります。
無限ループが生まれるメカニズムから学んでいきましょう。
For文やDo文での条件設定ミスによる無限ループ
ループ文の条件設定ミスは無限ループの最も一般的な原因です。
特にDo…Loop文では、終了条件が永続的に満たされない状態になりやすく、プログラムが永続的に実行され続けます。
たとえば、以下のコードでは変数iが5に達することがないため、無限ループが発生します。
Sub 無限ループの例()
Dim i As Integer
i = 1
Do While i < 5
MsgBox "現在の値: " & i
' i = i + 1 が抜けている!
Loop
End Sub
上記のコードは、
6行目の i = i + 1 を設定しないせいで、i = 1 を無限に繰り返す
という内容です。
このような単純なミスでも、アプリケーションが完全に停止してしまいます。
条件式の論理演算子の使い方や比較演算子の向きを間違えることも、同様の問題を引き起こす原因となるので注意しましょう。
関連記事「For文とIF文の組み合わせ」では、繰り返し処理と条件分岐を組み合わせたVBAコードの書き方が紹介されています。
変数の更新忘れが引き起こす無限ループパターン
ループ内で制御変数の更新を忘れることは、気づきにくいミスです。
特に複雑な処理を行う際、変数の更新処理が条件分岐の中に埋もれてしまい、特定の条件下でのみ更新されない状況が発生します。
変数の更新忘れが原因で無限ループが発生してしまうサンプルコードがこちら
Sub 変数更新忘れの例()
Dim counter As Integer
counter = 0
Do Until counter >= 10
If counter Mod 2 = 0 Then
' 偶数の場合の処理
MsgBox "偶数: " & counter
counter = counter + 1
Else
' 奇数の場合、counter更新を忘れがち
MsgBox "奇数: " & counter
' counter = counter + 1 が抜けている!
End If
Loop
End Sub
上記のコードは、
6行目から9行目の偶数処理では正常に処理でき、12行目から14行目の奇数処理のときcounter = counter + 1 が抜けてしまい無限ループになる
という内容です。
条件分岐が複雑になるほど、このような見落としが発生しやすくなるので注意しましょう。
入れ子構造での抜け条件設定不備による無限ループ
ネストしたループ構造では、内側と外側のループの制御が複雑に絡み合い、予期しない無限ループが発生することがあります。
特にExcelの行列処理でよく見られる問題で、セル範囲の境界条件や空白セルの判定処理でミスが起こりやすくなっています。
データ終端判定が不適切なせいで無限ループが発生するサンプルコードがこちら
Sub 入れ子ループの例()
Dim row As Integer, col As Integer
row = 1
Do While Cells(row, 1).Value <> "" ' 外側ループ
col = 1
Do While Cells(row, col).Value <> "" ' 内側ループ
MsgBox Cells(row, col).Value
col = col + 1
' 列の境界チェックが不十分
Loop
' row = row + 1 を忘れると無限ループ
Loop
End Sub
上記のコードは、
何列目までを繰り返すか明確に指定せずに9行目でcol = col + 1と記述することで、無限に列方向に処理を繰り返す
11行目にrow = row + 1 を忘れることで無限に1を格納し続ける
という内容です。
このようなネスト構造では、各ループレベルでの制御変数管理と終了条件の設定が重要になります。
【緊急時】VBA無限ループを5秒で強制終了する方法
無限ループに陥った際の緊急対処法を知っておくことは、データ損失を防ぐ上で極めて重要です。
適切な手順で強制終了を行えば、作業中のファイルを保護しながらプログラムを安全に停止できます。
ここでは実践的で確実性の高い3つの方法を、優先順位の高い順番で紹介します。
これらの手順を覚えておけば、どのような状況でも冷静に対処できるでしょう。
Ctrl+Breakキーによる基本的な強制終了手順
Ctrl+Breakキーの組み合わせは、VBAプログラムを中断する最も基本的で確実な方法です。
この操作により、
実行中のマクロが一時停止され、デバッグモードに移行するため、データの安全性を保ちながら処理を停止
することができます。
キーボードの右上にあるBreakキー(PauseBreakと表記されることもあります)とCtrlキーを同時に押下すると、即座にプログラムの実行が中断されます。
処理に時間のかかるサンプルコードがこちら
Sub 強制終了テスト()
Dim i As Long
For i = 1 To 1000000
' この処理中にCtrl+Breakで中断可能
Cells(1, 1).Value = i
Next i
End Sub
上記のコードは、
A1セルに1から1000000を繰り返し記述する
という内容です。
処理が完了するまでに時間がかかるので、Ctrl+Breakキーで中断されるかを試してみてください。
中断後は「終了」ボタンをクリックしてマクロを完全に停止させるか、「デバッグ」を選択してコードの修正を行うことができます。
関連記事「デバックの方法」では、初心者でも効率的にVBAコードを修正するやり方が紹介されています。
Alt+Escによる画面切り替えを使った緊急脱出法
Ctrl+Breakが効かない場合や、画面が完全に固まった状況では、Alt+Escキーによる画面切り替えが有効です。
この方法では、アクティブなウィンドウを切り替えることで、固まったExcelアプリケーションから一時的に脱出し、他のアプローチを試す時間を確保できます。
Alt+Escを数回押すことで、デスクトップや他のアプリケーションに切り替わり、タスクマネージャーの起動やファイルの保存といった対処が可能になります。
画面切り替え後は、
他の方法でExcelプロセスを制御する、データを別途保存してからアプリケーションを終了させる
という処理が可能です。
タスクマネージャーを使った最終手段での強制終了
上記の方法でも解決しない場合は、タスクマネージャーによるプロセス強制終了が最終手段となります。
Ctrl+Shift+Escでタスクマネージャーを起動し、「プロセス」タブからExcel.exeを選択して「タスクの終了」をクリックしてください。
ただし、
この方法では保存していないデータが完全に失われるリスクがある
ので注意してください。
強制終了が必要になる可能性の高いサンプルコードがこちら
Sub 危険なコード例()
Do
' DoEventsなしの無限ループ
MsgBox "停止しないループ"
Loop Until False ' 永続的にFalse
End Sub
上記のコードは、
メッセージボックスを表示する処理が無限に繰り返される危険なコード
です。
もしものときのために、強制終了を事前にどうしても確認しておきたい!
という方のみ利用してください。
無限ループを未然に防ぐ!プロが使う3つの予防策
無限ループの対処よりも重要なのは、そもそも発生させないための予防策です。
VBA作成段階から無限ループのリスクを最小限に抑えるコード作りを心がけましょう。
これから紹介する予防策を実装することで、安全で信頼性の高いVBAプログラムを作成できるようになります。
いろんな人が操作するエクセルにマクロを導入する。エラーが発生しない安全なVBAコードを導入したい!
と考えている方は是非参考にしてみてください。
DoEventsステートメントによる処理制御テクニック
DoEventsステートメントは、
長時間のループ処理中にシステムに制御を一時的に戻すための命令
です。
ユーザーからの中断操作を受け付けたり、画面の更新を行ったりできるため、
無限ループが発生しても強制終了処理を確実に実行できるようになります。
大量データの処理や繰り返し計算をするVBAに導入しましょう。
DoEventsステートメントを使ったサンプルコードがこちら
Sub DoEvents使用例()
Dim i As Long
For i = 1 To 100000
' 処理の内容
Cells(i, 1).Value = i * 2
' 100回に1回DoEventsを実行
If i Mod 100 = 0 Then
DoEvents
' この時点でCtrl+Breakが効く
End If
Next i
End Sub
上記のコードは、
8行目から11行目のコードで、繰り返し処理100回に1回の頻度でDoEventsを実行する
という内容です。
DoEventsを適切に配置することで、処理速度とユーザビリティのバランスを取ることができます。
コードに問題がなければ処理は継続されます。
なので、
DoEventsを実行するタイミングで処理が途中で止まることはない
というこちです。
頻繁すぎる実行は処理速度を低下させる原因になります。適切な間隔でDoEventsを記述しておきましょう。
Exit文を活用した安全なループ脱出設計
Exit文は、特定の条件が満たされた際にループから安全に脱出するための命令です。
For…Next文にはExit For、Do…Loop文にはExit Doを使用し、
予期しない状況やエラー発生時の緊急脱出ルートを事前に設計
しておきましょう。
Exit文を使用したサンプルコードがこちら
Sub Exit文の安全な使用例()
Dim counter As Integer
Dim maxAttempts As Integer
maxAttempts = 1000 ' 安全装置として最大試行回数を設定
counter = 0
Do
counter = counter + 1
' 通常の終了条件
If Cells(counter, 1).Value = "END" Then
Exit Do
End If
' 安全装置: 最大試行回数に達した場合の強制脱出
If counter >= maxAttempts Then
MsgBox "最大試行回数に達しました。処理を中断します。"
Exit Do
End If
' その他の処理
Cells(counter, 2).Value = "処理中..."
DoEvents
Loop
End Sub
上記のコードは、
11行目から13行目のコードは「END」というテキストを検知したら処理を終了する
16行目から19行目のコードは最大繰り返し回数に達したら処理を終了する
上記の2つ以外は処理を継続する
という内容です。
このように、複数の脱出条件を設けることで、無限ループを避けることができます。
カウンター変数による無限ループ防止機能の実装
カウンター変数を使った無限ループ防止は、最も確実で分かりやすい予防策の一つです。
ループの実行回数を監視し、予め設定した上限値に達した場合は自動的に処理を停止します。
この方法は、
終了条件が複雑な場合や外部データに依存するデータ処理をするマクロへの実装
がおすすめです。
カウンターを使って無限ループを防止するサンプルコードがこちら
Sub カウンター防止機能付きループ()
Dim i As Integer
Dim safetyCounter As Long
Dim maxLoopCount As Long
maxLoopCount = 10000 ' 安全上限値を設定
safetyCounter = 0
i = 1
Do While i <= 100
safetyCounter = safetyCounter + 1
' 安全装置: カウンターが上限に達した場合
If safetyCounter > maxLoopCount Then
MsgBox "警告: ループが上限回数に達しました。" & vbCrLf & _
"プログラムにバグがある可能性があります。", vbExclamation
Exit Do
End If
' 通常の処理
Cells(i, 1).Value = "データ" & i
' 条件によってiを更新(バグがあると更新されない場合がある)
If Cells(i, 1).Value <> "" Then
i = i + 1
End If
DoEvents
Loop
MsgBox "処理完了。実行回数: " & safetyCounter
End Sub
上記のコードは、
14行目から18行目のコードで繰り返し上限回数(6行目のコードで設定)に達したら処理を終了させる
という内容です。
このカウンター機能により、プログラムのバグによる無限ループを早期に発見し、システムの安定性を確保できます。
実践!無限ループ対策を含む安全なVBAコードの書き方
理論的な知識を実際のコーディングに活用するためには、具体的なコード例と実装パターンを学ぶことが重要です。
エクセル業務で使用頻度の高いループ処理について、無限ループ対策を組み込んだ実践的なコード例を紹介します。
これらのテンプレートを参考にすることで、最初から安全性の高いプログラムを作成できるようになるでしょう。
For文での安全なループ処理の実装サンプル
For文は最も制御しやすいループ構造ですが、配列の境界チェックや動的な範囲変更に対応するための安全策が必要です。
範囲チェック、エラーハンドリング、進捗表示機能を組み合わせたサンプルコードがこちら
Sub 安全なFor文の実装例()
Dim lastRow As Long
Dim i As Long
Dim processedCount As Long
' エラーハンドリングを設定
On Error GoTo ErrorHandler
' データ範囲を動的に取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
' データが存在しない場合の処理
If lastRow < 2 Then
MsgBox "処理対象のデータがありません。"
Exit Sub
End If
' 安全な範囲でループを実行
For i = 2 To lastRow
' 空行チェック(安全装置)
If Cells(i, 1).Value = "" Then
GoTo NextIteration
End If
' メイン処理
Cells(i, 3).Value = Cells(i, 1).Value * Cells(i, 2).Value
processedCount = processedCount + 1
' 進捗表示(ユーザビリティ向上)
If i Mod 100 = 0 Then
Application.StatusBar = "処理中... " & i & "/" & lastRow & " (" & _
Format(i / lastRow, "0%") & ")"
DoEvents
End If
NextIteration:
Next i
' 正常終了処理
Application.StatusBar = False
MsgBox "処理完了: " & processedCount & "件のデータを処理しました。"
Exit Sub
ErrorHandler:
Application.StatusBar = False
MsgBox "エラーが発生しました(行: " & i & "): " & Err.Description
End Sub
上記のコードは、
7行目のコードは、エラーが発生すると44行目にジャンプし、エラー内容を表示する
13行目から16行目のコードは、セルにデータが存在しないとき処理を終了させる
21行目から23行目のコードは、繰り返し処理途中に空白セルがあったとき無駄な処理を避け36行目にジャンプする
30行目から34行目のコードは、繰り返し処理100回ごとにDoEventsを設けて強制終了できるタイミングを作る
という内容です。
動的な範囲取得、境界チェック、エラーハンドリング、ユーザーフィードバックが設定されているので、複雑な処理が要求される業務へ導入しても問題ありません。
関連記事「最終行を取得するカウント関数の使い方」では、変動する最終行を取得する方法が紹介されています。
Do…Loop文における条件設定
Do…Loop文は柔軟性が高い反面、条件設定のミスによる無限ループリスクが高いデメリットがあります。
こんな問題を解決するには、
どんなエラーが発生しても柔軟に対応できるVBAの設定
が必要です。
複数の終了条件、タイムアウト機能、状態監視を組み合わせたサンプルコードがこちら
Sub 安全なDoLoop文の実装例()
Dim attempts As Integer
Dim maxAttempts As Integer
Dim startTime As Date
Dim timeoutMinutes As Integer
Dim currentRow As Long
Dim targetValue As String
' 初期設定
maxAttempts = 1000
timeoutMinutes = 5
attempts = 0
startTime = Now
currentRow = 1
targetValue = "完了"
' エラーハンドリング
On Error GoTo ErrorHandler
Do
attempts = attempts + 1
' 安全装置1: 最大試行回数チェック
If attempts > maxAttempts Then
MsgBox "警告: 最大試行回数(" & maxAttempts & ")に達しました。", vbExclamation
Exit Do
End If
' 安全装置2: タイムアウトチェック
If DateDiff("n", startTime, Now) > timeoutMinutes Then
MsgBox "警告: 制限時間(" & timeoutMinutes & "分)を超過しました。", vbExclamation
Exit Do
End If
' メイン処理
If Cells(currentRow, 1).Value = targetValue Then
MsgBox "目標値を発見しました(行: " & currentRow & ")"
Exit Do
End If
' 次の行へ移動
currentRow = currentRow + 1
' データ終端チェック
If currentRow > Cells(Rows.Count, 1).End(xlUp).Row Then
MsgBox "データ終端に達しました。目標値は見つかりませんでした。"
Exit Do
End If
' 定期的な画面更新
If attempts Mod 50 = 0 Then
Application.StatusBar = "検索中... 試行回数: " & attempts & " 現在行: " & currentRow
DoEvents
End If
Loop
' 正常終了処理
Application.StatusBar = False
MsgBox "検索処理完了。試行回数: " & attempts
Exit Sub
ErrorHandler:
Application.StatusBar = False
MsgBox "エラーが発生しました: " & Err.Description
End Sub
上記のコードでは、
30行目から33行目のコードは、指定の処理時間(11行目のコード:5分)を凄ると処理を終了する
51行目から54行目のコードは、現在どの部分を処理中なのかを知らせる
という内容です。
時間制限、回数制限、データ範囲制限という3重の安全装置により、あらゆる状況での無限ループを防止しています。
エラーハンドリングと組み合わせた堅牢なコード設計
エラーハンドリングと無限ループ対策を組み合わせることで、予期しない状況でも安全に動作するプログラムを作成できます。
包括的なエラー処理と安全装置を実装したサンプルコードがこちら
Sub 堅牢なループ処理の実装例()
Dim fileCounter As Integer
Dim maxFiles As Integer
Dim processedFiles As Integer
Dim errorCount As Integer
Dim startTime As Date
Dim fileName As String
Dim folderPath As String
' 初期設定
maxFiles = 100 ' 処理上限ファイル数
processedFiles = 0
errorCount = 0
fileCounter = 1
startTime = Now
folderPath = "C:\DataFiles\"
' エラーハンドリングの設定
On Error GoTo ErrorHandler
Do While fileCounter <= maxFiles
' ファイル名を生成
fileName = folderPath & "data" & Format(fileCounter, "000") & ".txt"
' ファイル存在チェック
If Dir(fileName) = "" Then
' ファイルが存在しない場合は次へ
GoTo NextFile
End If
' ファイル処理のメインロジック
Call ProcessFile(fileName) ' 別関数でファイル処理
processedFiles = processedFiles + 1
' 進捗表示とユーザー操作受付
If fileCounter Mod 10 = 0 Then
Application.StatusBar = "ファイル処理中... " & processedFiles & "/" & fileCounter & _
" (エラー: " & errorCount & "件)"
DoEvents
' ユーザーによる中断チェック
If Application.StatusBar = False Then ' ユーザーがESCを押した場合
If MsgBox("処理を中断しますか?", vbYesNo + vbQuestion) = vbYes Then
Exit Do
End If
End If
End If
' 時間制限チェック(10分で自動停止)
If DateDiff("n", startTime, Now) > 10 Then
MsgBox "制限時間に達したため処理を停止します。" & vbCrLf & _
"処理済み: " & processedFiles & "件"
Exit Do
End If
NextFile:
fileCounter = fileCounter + 1
' 異常なエラー多発の場合は停止
If errorCount > processedFiles * 0.5 And processedFiles > 10 Then
MsgBox "エラー率が高すぎます。処理を中断します。", vbCritical
Exit Do
End If
Loop
' 正常終了処理
Application.StatusBar = False
MsgBox "処理完了" & vbCrLf & _
"処理済みファイル数: " & processedFiles & vbCrLf & _
"エラー発生数: " & errorCount & vbCrLf & _
"処理時間: " & DateDiff("n", startTime, Now) & "分"
Exit Sub
ErrorHandler:
errorCount = errorCount + 1
' エラーログ記録
Debug.Print "エラー発生 - ファイル: " & fileName & ", エラー: " & Err.Description
' 重大エラーの場合は処理停止
If Err.Number = 53 Or Err.Number = 76 Then ' ファイルが見つからない、パスが無効
Resume NextFile
Else
' その他のエラーは処理継続するか判断
If MsgBox("エラーが発生しました: " & Err.Description & vbCrLf & _
"処理を継続しますか?", vbYesNo + vbExclamation) = vbYes Then
Resume NextFile
Else
Application.StatusBar = False
Exit Sub
End If
End If
End Sub
' ファイル処理の実装例(サブプロシージャ)
Sub ProcessFile(filePath As String)
' 実際のファイル処理ロジックをここに実装
' エラーが発生する可能性のある処理
Open filePath For Input As #1
' ファイル内容の読み取り・処理
Close #1
End Sub
上記のコードは、
19行目のコードは、エラーが発生した場合74行目にジャンプしエラー内容を表示し、処理を継続するか停止するか選択を促す
26行目から29行目のコードは、ファイルの有無をチェックする
36行目から39行目のコードは、10行ごとに処理の進捗状況をチェックする
50行目から54行目のコードは、開始から10分が経過すると処理を途中で中断する
という内容です。
複数の安全装置、詳細なエラー処理、処理状況の監視が組み合わされています。
実際のエクセル業務にそのまま使用できるレベルのVBAコードなので是非活用してみてください。
関連記事「エラーを無視するときの注意点」では、Resume Nextを安全に使うテクニックが紹介されています。
VBA初心者が効率化VBAを導入する方法
VBAなんて扱ったことないけど、エラーが発生しない安全な効率化マクロを導入したい!
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAスキルを身に着ける前は、「マクロ開発の外注」で対応していましたが、
今では自分で効率化マクロをサクッと導入しちゃいます。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
外注した方が楽だけど、費用がかかる。自分で導入すれば費用は0円だけど時間がかかる。。
いずれにせよ、効率化マクロを導入できれば作業効率が飛躍的にアップするのは間違いありません。
あなたに合った方法で導入しちゃいましょう。
マクロ開発を外注に依頼する
マクロ開発を外注に依頼する方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなデータ抽出作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』することで、
すぐに使っているエクセルにマクロを導入することができます。
VBA初心者でも形になっているマクロをゲットできる、費用が安い、
というメリットがあります。
しかし、
想定するマクロを見つけることが難しい、業務内容に合わせるためのアレンジが必要
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい内容のコードを書くだけ
です。
【VBA 処理が止まる】【VBA 動かなくなる】でネット検索すれば、問題を解決できるコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。