【VBA】Intersectメソッドで「触ってほしくない場所」を守る方法

【業務効率化】VBA
スポンサーリンク

VBAで「セルを変更したら自動で計算する」みたいな処理、憧れますよね。

でも、いざ作ってみると「関係ないセルを触ったときまでマクロが動いてエラーになる」なんてこと、ありませんか?

ここで登場するのが、今日の主役Intersect(インターセクト)メソッドです。

これを使えば、マクロが動く範囲を「この範囲内だけ!」とピンポイントで指定できるようになります。

【業務効率化】VBAの記事を見る

Intersect = 「共通の場所」を探す

Intersectは、「2つの範囲が重なっている部分(共通部分)」を見つけてくれる命令です。

  1. 「マクロを動かしたい範囲(例:A列)」
  2. 「ユーザーが今触ったセル(Target)」

この2つが重なったときだけ、「あ、ここで動けばいいんですね!」とVBAが反応する。これがIntersectの仕組みです。

逆に、重ならなければ(共通部分がなければ)、VBAは「お呼びじゃないですね」と何もしないで終了します。

【コピペOK】そのまま使えるコード

では、実際に使えるコードを紹介します。

今回は「A1からA10のセル」を変更したときだけメッセージを出すコードです。それ以外のセルを触っても、何も起きません(=安全です)。

シートのモジュール(Sheet1などをダブルクリックした画面)に貼り付けて使ってくださいね。

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 機能を動かしたい範囲を指定
    Dim watchRange As Range
    Set watchRange = Range("A1:A10")
   
    ' 「今触ったセル(Target)」と「設定した範囲(watchRange)」が重なっているかチェック
    If Not Intersect(Target, watchRange) Is Nothing Then
       
        ' イベントの連鎖を防ぐ(無限ループ防止)
        Application.EnableEvents = False
       
        ' 重なっている場合、ここにやりたい処理を書いてください

        MsgBox "指定された範囲(" & Target.Address & ")が変更されました!", vbInformation
       
        Application.EnableEvents = True
       
    Else
        ' 重なっていなければ何もしません
    End If
   
End Sub

どうして「Not … Is Nothing」なのか?

プログラミングを勉強しているとよく出てくる、こういう呪文のような書き方。

If Not Intersect(Target, Range(“A1”)) Is Nothing Then

これ、直訳するとこうなります。

  • Intersectの結果が Nothing(重なりがない)では Not(ない) ならば…。
  • つまり、「重なりが有るならば」

ちょっとひねくれてますよね(笑)。

でも、「重なりがないわけじゃない=重なっている」というこの論理式が、プログラミングの世界では「絶対に間違いのない確認方法」として重宝されます。

論理的に抜け漏れがないようになっていないと、安心してプログラムに任せられないですよね。

最初は「こういう決まり文句なんだ」と割り切ってしまって大丈夫です。

焦らず、一つずつ積み上げましょう

Intersectを使うことで、マクロは「どこでも暴走するおっちょこちょい」から、「自分が指示した場所だけで働く機能」に進化させることが可能です。

最初は意味がわからなくても、コピペして動いたときの「あ、できた…!」という小さな感動を大切にしてください。

失敗しても、PCは壊れませんので、ぜひ試してみてください。

【業務効率化】VBAの記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました