【VBA】Intersectの使い方完全ガイド!初心者でも5分でマスターできる実践テクニック
「A1セルからC10セルに値が入力されているときだけマクロを実行したい」「A1セルからC10セルに挿入された図形だけ削除したい」
このような自動化をしたい!と感じたことありませんか?
こんな問題はVBAのIntersectメソッドを使えば簡単に解決できます。
Intersectメソッドを使えば、
セル範囲の重複部分を瞬時に判定する
ことができます。
さらに、一つ一つセルを操作する無駄な処理を省くことができるので、大量のセルを高速処理できる魔法のような機能です。
しかも、使い方はめちゃくちゃ簡単。たった数行のコードで複雑な条件分岐を簡潔に記述することができます。
本記事では、Intersectメソッドの基本的な使い方から実務で即戦力となる応用テクニックまで、豊富なコード例とともにわかりやすく解説します。
5分後には、あなたもIntersectメソッドを自在に操れるようになっているでしょう。
【VBA】Intersectメソッドとは?基本概念を理解しよう
VBAのIntersectメソッドは、Excelでセル範囲の重複部分を見つける便利な機能で、大量のデータを効率的に処理することができます。
特定の範囲のセルを変更した時だけ処理を実行したい
なんて処理はIntersectメソッドで簡単に自動化可能です。
このメソッドをマスターすれば、
〇〇セル範囲が××なとき、△△な処理をする
という複雑な処理でも瞬時に処理できるようになります。
Intersectメソッドの定義と役割
Intersectメソッドは、複数のセル範囲で共通する部分を取得するメソッドです。
〇〇セル範囲が××なとき、△△な処理をする
という場合に使われます。
理解を深めてもらうために、
A1:C5とB3:D7という二つの範囲がある場合、重複するB3:C5の部分だけを抽出する
というマクロをご紹介します。
Dim rng1 As Range, rng2 As Range, result As Range
Set rng1 = Range("A1:C5")
Set rng2 = Range("B3:D7")
Set result = Application.Intersect(rng1, rng2)
このコードでは、
まず二つの範囲オブジェクトを変数に格納し、Application.Intersectメソッドで重複部分を計算。実行結果として、B3:C5の範囲がresult変数に格納される
という内容です。
Intersectメソッドを使えば、範囲の重複判定とオブジェクト操作を組み合わせた高度な処理が実現可能です。
セル範囲の重複部分を取得する仕組み
Intersectメソッドは、
Excelの内部的な範囲管理システムを活用し、座標計算によって範囲の重複を判定
します。
たとえば、
行と列の開始・終了位置を比較して、重複する矩形領域を自動的に特定する
なんて処理が可能です。
この処理は高速で実行され、複雑な条件分岐を書く必要がありません。結果として、シンプルなコードで確実な範囲判定が実現できます。
Sub CheckIntersection()
Dim targetRange As Range, checkRange As Range, overlap As Range
Set targetRange = Range("A1:E10")
Set checkRange = Range("C5:G15")
Set overlap = Application.Intersect(targetRange, checkRange)
If Not overlap Is Nothing Then
MsgBox "重複範囲: " & overlap.Address
End If
End Sub
このコードは、
まず二つの範囲を定義し、Intersectメソッドで重複部分を計算。重複が存在する場合、その範囲のアドレスをメッセージボックスで表示する
という内容です。
実行結果がこちら
重複部分を簡単に取得できます。
いつIntersectメソッドを使うべきか?具体的な場面
Intersectメソッドは無駄な処理を避けてパフォーマンスを向上させるという特性があるので、
条件付き処理や範囲の動的な判定が必要な場面で活用されます。
Worksheet_Changeイベントで特定の範囲が変更された時のみ計算を実行する、データ入力時に関連するセルの書式を自動変更する
なんて処理が可能です。
【VBA】Intersect基本構文と書き方をマスター
VBAのIntersectメソッドの基本構文がこちら
Application.Intersect(Range1, Range2, ...)
引数は最大30個までの範囲オブジェクトを指定でき、すべてに重複する部分のみが返されます。
複雑な条件判定を簡潔に記述できるようになるので基本ルールを理解しておきましょう。
Application.Intersectの正しい構文
Application.Intersectメソッドの正しい構文は、複数の範囲オブジェクトを引数として受け取る形式です。
Set result = Application.Intersect(rng1, rng2, rng3)のように記述し、戻り値は必ずRangeオブジェクト変数で受け取ります。
型不一致エラーやオブジェクト参照エラーを防ぐことができるので、構文の記述は正確に行いましょう。
Sub BasicSyntaxExample()
Dim range1 As Range, range2 As Range, intersection As Range
Set range1 = Range("A1:D10")
Set range2 = Range("C5:F15")
Set intersection = Application.Intersect(range1, range2)
If intersection Is Nothing Then
MsgBox "重複なし"
Else
intersection.Interior.Color = RGB(255, 255, 0)
End If
End Sub
このコードでは、
まず二つの範囲変数を宣言し、具体的な範囲を代入。次にIntersectメソッドで重複部分を取得し、Nothing判定で重複の有無を確認した後、重複部分の背景色を黄色に変更する
という内容です。
実行結果がこちら
IntersectメソッドとNothing判定の組み合わせは使用頻度がかなり高いので、自由に扱えるようにしましょう。
引数の指定方法と注意点
Intersectメソッドの引数は、
セル範囲の座標計算を正確に行うため、すべてがRangeオブジェクトである必要
があります。
たとえば、
文字列でのセル指定やVariant型の変数は使用できない。引数が2個未満の場合や、いずれかがNothingの場合はエラーが発生する
という制限があります。
このような制限を理解して、事前にオブジェクトの妥当性を確認する習慣を身につけることが重要です。
Sub ArgumentValidation()
Dim rng1 As Range, rng2 As Range, result As Range
' 引数の妥当性チェック
Set rng1 = Range("A1:C3")
Set rng2 = Range("B2:D4")
Set result = Application.Intersect(rng1, rng2)
If Not result Is Nothing Then
Debug.Print "重複範囲: " & result.Address
End If
End Sub
このコードは、
まず引数として使用する範囲オブジェクトがNothingでないことを確認。その後、具体的な範囲を設定してIntersectメソッドを実行し、結果をイミディエイトウィンドウに出力する
という内容です。
実行結果がこちら
イミディエイト欄の使い方がわからない!という方は関連記事「デバックのやり方」を参考にしてください。
戻り値の種類と処理パターン
Intersectメソッドの戻り値は、RangeオブジェクトまたはNothingのいずれかです。
重複が存在する場合は有効なRangeオブジェクトが返され、重複がない場合はNothingが返されます。
この戻り値の性質を活用して、条件に応じた処理を分岐させることで、エラー発生の確率低い安全なマクロを作成できます。
Sub HandleReturnValues()
Dim userRange As Range, targetRange As Range, overlap As Range
Set userRange = Selection
Set targetRange = Range("A1:E10")
Set overlap = Application.Intersect(userRange, targetRange)
Select Case overlap Is Nothing
Case True
MsgBox "選択範囲は対象範囲外です"
Case False
MsgBox "重複セル数: " & overlap.Cells.Count & "個"
overlap.Font.Bold = True
End Select
End Sub
このコードでは、
まずユーザーの選択範囲と指定した範囲の重複を取得。Select Case文を使用してNothingかどうかを判定し、重複がない場合は警告メッセージを、重複がある場合はセル数を表示して太字に設定する
という内容です。
実行結果がこちら
【重要】IntersectでNothing判定をする方法
VBAのIntersectでNothing判定を行うことは、エラーを防ぐ最重要テクニックです。
Is演算子でNothing判定を行い、範囲に重複がない場合にNothingが返されエラー発生を防ぐことができます。
IntersectメソッドとあわせてNothingの使い方をマスターしましょう。
Nothingが返される条件とは
IntersectメソッドでNothingが返される条件は、指定した範囲同士に重複部分が存在しない場合です。
たとえば、
A1:C3とE5:G7のように完全に離れた範囲や、異なるワークシート上の範囲を指定すると重複部が存在しないのでエラーが発生します。
あらかじめ、条件分岐でNothingを宣言しておけば予期せぬエラーを防ぐことが可能です。
Sub DemonstrateNothingConditions()
Dim range1 As Range, range2 As Range, result As Range
' パターン1: 完全に離れた範囲
Set range1 = Range("A1:C3")
Set range2 = Range("E5:G7")
Set result = Application.Intersect(range1, range2)
Debug.Print "パターン1結果: " & (result Is Nothing)
' パターン2: 重複がある範囲
Set range2 = Range("B2:D4")
Set result = Application.Intersect(range1, range2)
Debug.Print "パターン2結果: " & (result Is Nothing)
End Sub
このコードでは、
まず完全に離れた二つの範囲でIntersectを実行してTrueが返されることを確認。続いて重複がある範囲で同じ処理を行い、Falseが返されることをイミディエイトウィンドウで確認できる
という内容です。
実行結果がこちら
Is演算子を使った正しい判定方法
Is演算子を使ったNothing判定は、オブジェクト参照の比較を行うときに必須のテクニックです。
Is演算子ではなく等号演算子(=)を使ってしまうと正確な判定ができないので注意してください。
If result Is Nothing Thenという記述が正しく、If result = Nothingは不適切
ということになります。
この区別を理解することで、オブジェクトの状態を確実に判定し、安定したプログラムを作成できます。
Sub CorrectNothingCheck()
Dim checkRange As Range, targetArea As Range, intersection As Range
Set checkRange = Range("A1:C5")
Set targetArea = Range("D1:F5")
Set intersection = Application.Intersect(checkRange, targetArea)
' 正しいNothing判定
If intersection Is Nothing Then
MsgBox "範囲に重複はありません"
Exit Sub
End If
' 重複がある場合の処理
With intersection
.Interior.Color = RGB(200, 255, 200)
.BorderAround Weight:=xlThick
End With
End Sub
このコードでは、
まず二つの範囲の重複をチェックし、Is演算子でNothing判定を実行。重複がない場合は処理を終了し、重複がある場合は背景色を薄緑に設定して太い枠線を描画する
という内容です。
実行結果がこちら
よくあるエラーパターンと解決策
VBAのIntersectでよくあるエラーは、Nothing判定を怠ることで発生するオブジェクト参照エラーです。
戻り値がNothingになる可能性をしっかり考慮しましょう。
Intersectの結果に対して直接プロパティやメソッドを実行すると「オブジェクトが設定されていません」エラーが発生します。
このエラーの発生を防ぐために、事前にNothing判定を行う習慣を身につけてください。
Sub ErrorPatternAndSolution()
Dim area1 As Range, area2 As Range, overlap As Range
Set area1 = Range("A1:C3")
Set area2 = Range("E1:G3")
' 【エラーパターン】Nothing判定なしで処理実行
' Set overlap = Application.Intersect(area1, area2)
' overlap.Select ' エラー発生!
' 【解決策】適切なNothing判定
Set overlap = Application.Intersect(area1, area2)
If Not overlap Is Nothing Then
overlap.Select
MsgBox "重複範囲を選択しました: " & overlap.Address
Else
MsgBox "重複する範囲が見つかりません"
End If
End Sub
このコードでは、
まずエラーが発生するパターンをコメントアウトで示し、続いてNothing判定を含む正しい処理方法を実装しています。条件分岐により、重複がある場合は範囲選択とアドレス表示を、重複がない場合は適切なメッセージを表示する
という内容です。
Nothing判定を含めることで安全な処理フローが実行されます。
【VBA】Intersect実践例!セル範囲の判定テクニック
VBAのIntersectを使ったセル範囲の判定テクニックは、
動的な範囲処理や条件付きイベント処理を効率的に実装できるようになるので実務レベルのマクロ開発に欠かせないスキル
といえます。
ユーザーの入力範囲に応じて処理を分岐させる、複数の範囲で同時に重複をチェックする
なんて処理の自動化が可能です。
Intersectを使って業務内容に合わせた効率化マクロをどんどん開発しちゃってください。
特定セルが範囲内にあるかチェックする方法
特定のセルが指定範囲内にあるかをチェックするには、Intersectメソッドと単一セルを組み合わせます。
Active.Cellが特定の範囲内にある場合のみ処理を実行したい!
という場合に活用できます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim targetRange As Range, activeCell As Range, checkResult As Range
Set targetRange = Range("B2:E10")
Set activeCell = Target(Row, Column)
Set checkResult = Application.Intersect(targetRange, activeCell)
If Not checkResult Is Nothing Then
MsgBox "アクティブセル " & activeCell.Address & " は対象範囲内です"
With activeCell
.Interior.Color = RGB(255, 200, 200)
.Font.Bold = True
End With
Else
MsgBox "アクティブセルは対象範囲外です"
End If
End Sub
このコードでは、
まず判定対象となる範囲とアクティブセルを変数に格納。Intersectメソッドで重複をチェックし、結果がNothingでない場合はセルが範囲内にあると判定して、背景色を薄赤色に設定し太字にする
という内容です。
実行結果がこちら
マクロを実行させる条件は、「セルをクリックしたとき」なので、
Private Sub Worksheet_SelectionChangeにコードを記述
しています。
関連記事「セルをクリックしたらマクロを実行する」では、引数Targetの使い方が紹介されています。
複数のセル範囲で重複を調べる実例
複数のセル範囲で重複を調べる場合、Intersectメソッドに3つ以上の引数を指定します。
この機能は、複雑の条件を満たす範囲のみを効率的に特定することが可能。
データ入力範囲、計算対象範囲、書式設定範囲の3つすべてに含まれるセルのみを処理する
なんて処理の自動化ができます。
Sub MultipleRangeIntersection()
Dim inputRange As Range, calcRange As Range, formatRange As Range
Dim commonArea As Range
Set inputRange = Range("A1:F10")
Set calcRange = Range("C3:H12")
Set formatRange = Range("B2:E8")
' 3つの範囲すべてに重複する部分を取得
Set commonArea = Application.Intersect(inputRange, calcRange, formatRange)
If Not commonArea Is Nothing Then
With commonArea
.Interior.Color = RGB(200, 255, 255)
.BorderAround Weight:=xlMedium, Color:=RGB(0, 100, 200)
.Font.Color = RGB(0, 0, 150)
End With
MsgBox "共通範囲: " & commonArea.Address & " を強調表示しました"
Else
MsgBox "3つの範囲に共通部分はありません"
End If
End Sub
このコードでは、
まず3つの異なる範囲を定義し、Intersectメソッドに3つの引数を渡して共通部分を取得。共通範囲が存在する場合は、背景色を薄青、枠線を青色の中太線、文字色を紺色に設定して視覚的に強調表示する
という内容です。
実行結果がこちら
動的な範囲指定での活用パターン
動的な範囲指定でのIntersect活用は、データの変化に応じて柔軟に処理範囲を調整するテクニックです。
固定範囲では対応できない可変データに対して自動的に処理範囲を最適化することができます。
UsedRangeや名前付き範囲と組み合わせてデータ量に関係なく適切な処理を実行する
なんてことができます。
Sub DynamicRangeIntersection()
Dim dataRange As Range, targetArea As Range, workingRange As Range
' 動的にデータ範囲を取得
Set dataRange = ActiveSheet.UsedRange
' 処理対象エリアを指定
Set targetArea = Range("A1").Resize(20, 10) ' A1から20行10列の範囲
' データが存在し、かつ処理対象内の範囲のみを取得
Set workingRange = Application.Intersect(dataRange, targetArea)
If Not workingRange Is Nothing Then
Dim cellCount As Long
cellCount = workingRange.Cells.Count
With workingRange
.Font.Name = "Arial"
.Font.Size = 11
.Interior.ColorIndex = 15 ' グレー
End With
MsgBox "処理対象: " & workingRange.Address & vbCrLf & _
"セル数: " & cellCount & "個"
Else
MsgBox "処理対象範囲にデータがありません"
End If
End Sub
このコードでは、
まずUsedRangeで実際にデータが入力されている範囲を取得し、Resizeメソッドで動的に作成した処理対象範囲との重複を計算。重複部分が存在する場合は、フォントをArial 11ptに統一し背景をグレーに設定して、処理したセル数を表示する
という内容です。
常にデータ量が変化するエクセル業務に応用すれば作業効率を飛躍的にアップさせることができます。
【VBA】Intersect活用で業務効率化を実現
VBAのIntersectを活用した業務効率化は、データ処理の自動化と処理速度の大幅な向上を実現します。
Intersectを活用すれば不要な処理を排除して必要な範囲のみを対象とした最適化処理が可能です。
大量のデータから条件に合致する部分のみを抽出して処理することで、大幅な実行時間の短縮に繋がります。
あなたが行っているエクセル業務にIntersectを導入できるよう使い方をマスターしておきましょう。
データ処理速度を10倍高速化する方法
データ処理速度の10倍高速化は、Intersectメソッドによる範囲限定処理で実現できます。
なぜこれほどの高速化が可能かというと、全範囲をループ処理する代わりに必要な部分のみを特定して処理するからです。
たとえば、10万行のデータから特定の範囲のみを更新する場合、全体をチェックするより対象範囲のみを処理する方が圧倒的に高速です。
この手法により、大規模データの処理時間を劇的に短縮できます。
Sub HighSpeedDataProcessing()
Dim fullDataRange As Range, targetRange As Range, processRange As Range
Dim startTime As Double, endTime As Double
startTime = Timer
' 大量データの範囲を設定
Set fullDataRange = Range("A1:Z10000")
Set targetRange = Range("E100:P500") ' 処理対象範囲
' 重複部分のみを処理対象とする
Set processRange = Application.Intersect(fullDataRange, targetRange)
If Not processRange Is Nothing Then
' 画面更新を停止して高速化
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' 対象範囲のみを一括処理
With processRange
.Formula = "=IF(ISBLANK(A1),"""",A1*1.1)"
.Value = .Value ' 数式を値に変換
End With
' 設定を元に戻す
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End If
endTime = Timer
MsgBox "処理時間: " & Format(endTime - startTime, "0.00") & "秒"
End Sub
このコードでは、
まず大量データ範囲と処理対象範囲を定義し、Intersectで重複部分のみを取得。画面更新と自動計算を停止した状態で、対象範囲に一括で数式を適用してから値に変換し、最後に処理時間を計測して表示する
という内容です。
高速化処理が実行されます。
実務でよく使う応用パターン集
実務でよく使うIntersectの応用パターンは、データ検証、条件付き書式、自動レポート生成などの場面で活躍します。
入力チェック機能や関連データの自動更新、条件に応じた書式設定などを効率的に実装する
なんて処理の自動化が可能です。
これらの応用パターンをマスターすることで、実践的なマクロ開発スキルが身につきます。
Sub PracticalApplicationPatterns()
Dim inputArea As Range, validationArea As Range, reportArea As Range
Dim checkedCells As Range, updatedCells As Range
' 各種範囲を定義
Set inputArea = Range("B2:F20")
Set validationArea = Range("A1:G25")
Set reportArea = Range("H1:L30")
' パターン1: 入力範囲の検証
Set checkedCells = Application.Intersect(inputArea, validationArea)
If Not checkedCells Is Nothing Then
' 空白セルをチェック
Dim emptyCell As Range
For Each emptyCell In checkedCells
If IsEmpty(emptyCell.Value) Then
emptyCell.Interior.Color = RGB(255, 200, 200)
End If
Next emptyCell
End If
' パターン2: レポート領域の自動更新
Set updatedCells = Application.Intersect(inputArea, reportArea)
If Not updatedCells Is Nothing Then
With updatedCells
.Font.Bold = True
.Interior.Color = RGB(200, 255, 200)
End With
MsgBox "レポート連動範囲を更新しました"
End If
End Sub
このコードでは、
まず入力範囲、検証範囲、レポート範囲を定義します。入力範囲と検証範囲の重複部分で空白セルをチェックして薄赤色でマークし、入力範囲とレポート範囲の重複部分を太字にして薄緑色に設定する
という内容です。
実行結果がこちら
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で表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『Intersectメソッドを使った効率化マクロ』『データ分析、集計を自動化するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

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