大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、イベントの発生を停止して無効にするには、「EnableEvents」を使います。値の変更や選択セルの変更時のイベントを停止することができます。イベントを使う際はは「EnableEvents」の使い方もマスターしていきましょう。

はじめに

この記事では、イベントの発生を停止して無効にする方法について、ご紹介します。

イベントを無効にするには、「EnableEvents」を使います。

値変更や、選択セルの変更時に発生するイベントを「無効」にすることができます。

値の変更時に発生するイベントでは、値を入力するときに無限ループとなってしまう場合があります。

無限ループを回避するために「EnableEvents」を使います。

イベントを使う際は「EnableEvents」の使い方もマスターしていきましょう。

では、イベントの発生を停止して無効にする方法について、解説していきます。

この記事で紹介すること

  • イベントの発生を停止して無効にする方法

目次から見たい項目へ移動すると便利ですよ。

目次

イベントを無効にする

イベントを無効にしてみます。

選択セル変更時のイベントを使っている場合

「選択セル変更」時のイベントを使っている場合でやってみます。

「選択セル変更」時のイベントを使う

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    'アクティブセルに値を入力
    ActiveCell = "選択しました"

End Sub
Sub TEST1()
    
    Range("A1").Select
    Range("A2").Select
    Range("A3").Select
    Range("A4").Select
    Range("A5").Select
    
End Sub

選択したセルに値が入力されるというVBAコードです。

選択したセルに値が入力される

選択したセルに値が入力されました

選択したセルに値が入力されました。

では、イベントを無効にしてみます。

「EnableEvents」でイベントを無効にする

「EnableEvents」でイベントを無効にしてみます。

「EnableEvents」でイベントを無効にする

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    'アクティブセルに値を入力
    ActiveCell = "選択しました"

End Sub
Sub TEST2()
    
    Range("A1").Select
    Range("A2").Select
    
    'イベントを無効
    Application.EnableEvents = False
    
    Range("A3").Select
    
    'イベントを有効
    Application.EnableEvents = True
    
    Range("A4").Select
    Range("A5").Select
    
End Sub

「EnableEvents」で選択セル変更時のイベントを停止して無効にできます。

イベントを無効にできた

「EnableEvents」で選択セル変更時のイベントを停止して無効にできました

「Range("A3")」を選択する際にイベントを無効にできました。

こんな感じで、イベントが発生する前に「EnableEvents = False」で無効にして、「EnableEvents = True」で有効にします。

Changeのイベントの無限ループを回避する

Changeのイベントの無限ループを回避する際にも「EnableEvents」が使えます。

やりたいこと

Changeイベントを使って入力した値に「1」を足すVBAコードを作成したいです。

入力した値に「1」を足したい

値変更時のイベントを使って入力した値に「1」を足すVBAコードを作成したいです

まずは、「EnableEvents」を使わずにやってみます。

Changeイベントで値を入力すると無限ループ

Changeイベントで値を入力すると無限ループとなってしまいます。

無限ループになっちゃう例

Private Sub Worksheet_Change(ByVal Target As Range)

    '値を入力
    Target.Value = Target.Value + 1 '←無限ループとなりますので、ご注意ください

End Sub
Sub TEST2()
    
    '値を入力
    Range("A1") = 1
    
End Sub

セルに「1」を入力してみます。

「1」を入力してみる

セルに「1」を入力してみます

「1」が無限に足されてしまいます。

無限ループになる

「1」が無限に足されてしまいます

無限ループとなってしまいました。

Changeイベントで値を入力する際は、注意です。

「EnableEvents」でイベントを無効にする

「EnableEvents」でイベントを無効にして、無限ループを回避してみます。

「EnableEvents」でイベントを無効にする

Private Sub Worksheet_Change(ByVal Target As Range)

    'イベントを無効
    Application.EnableEvents = False

    '値を入力
    Target.Value = Target.Value + 1

    'イベントを有効
    Application.EnableEvents = True

End Sub
Sub TEST3()
    
    '値を入力
    Range("A1") = 1
    
End Sub

という感じで、「値の入力の前」に「EnableEvents = False」でイベントを「無効」にして、値入力後に「有効」にします。

「1」を入力してみます。

「1」を入力してみる

「1」を入力してみます

「1」を1回だけ足して、「2」にできます。

「1」を足せた

「1」を1回だけ足して、「2」にできました

「1」を1回だけ足して、「2」にできました。

こんな感じで、Changeイベントで値を入力する際は、「EnableEvents」でイベントを無効にして入力しましょう。

おわりに

この記事では、イベントの発生を停止して無効にする方法について、ご紹介しました。

イベントを無効にするには、「EnableEvents」を使います。

値変更や、選択セルの変更時に発生するイベントを「無効」にすることができます。

値の変更時に発生するイベントでは、値を入力するときに無限ループとなってしまう場合があります。

無限ループを回避するために「EnableEvents」を使います。

イベントを使う際は「EnableEvents」の使い方もマスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す