大体でIT

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

大体でIT

Excel VBAで、選択セルの変更時に実行するには、「シートモジュール」で「Worksheet_SelectionChange」を使うとできます。実務で使う例として、選択セルの強調があります。シートイベントをうまく活用していきましょう。

はじめに

この記事では、選択セルの変更時に実行するシートイベントについて、ご紹介します。

「シートモジュール」で「Worksheet_SelectionChange」を使うことでできます。

選択セルの変更時に実行するセル範囲を指定するには、次のコードを使います。

  • 行や列の指定:「Row」や「Column」
  • セル範囲の指定:「Intersect」

選択セル変更時に実行するシートイベントを使う例として、選択セルの強調があります。

シートイベントをうまく実務で活用していきましょう。

では、選択セルの変更時に実行するシートイベントについて、解説していきます。

この記事で紹介すること

  • 選択セルの変更時に実行するシートイベントの使い方

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

目次

「選択の変更」時に実行する

「選択セルの変更」時に実行してみます。

「Worksheet_SelectionChange」を使う

選択セルの変更時に実行するには、「シートモジュール」で「Worksheet_SelectionChange」を使います。

まずは、「Worksheet_SelectionChange」を作成します。

選択セル変更時に実行するイベントを作成

「シートモジュール」で「Worksheet」を選択します。

「シートモジュール」で「Worksheet」を選択します

「シートモジュール」で「SelectionChange」を選択します。

「シートモジュール」で「SelectionChange」を選択します

「Worksheet_SelectionChange」を作成できます。

「Worksheet_SelectionChange」を作成できました

「Worksheet_SelectionChange」を作成できました。

選択セル変更時にメッセージを表示してみる

選択セル変更時にメッセージを表示するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    MsgBox "実行しました"
    
End Sub

VBE画面でみるとこんな感じです。

選択セル変更時に、メッセージを表示してみます

選択セルを変更したときに、マクロを実行できます。

選択セルを変更してみる

選択セルを変更したときに、マクロを実行できました

選択セルを変更したときに、マクロを実行できました。

「Target」で選択セルのアドレスを取得

「Target」で選択セルのアドレスを取得することができます。

変更した選択セルのアドレスを取得

変更した選択セルのアドレスを取得するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '選択したセルのアドレスを取得
    MsgBox Target.Address
    
End Sub

VBE画面でみるとこんな感じです。

選択セルを変更した際に、選択しているセルのアドレスを取得するVBAコードです

選択セルを変更して、選択セルのアドレスを取得できます。

変更した選択セルのアドレスを取得

選択セルを変更して、選択セルのアドレスを取得できました

選択セルを変更して、選択セルのアドレスを取得できました。

列を指定して実行

選択セルの変更時に、実行する「列」を指定してみます。

「1列目」に変更した場合に実行

「1列目」に変更した場合に実行するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '「1列目」の場合
    If Target.Column = 1 Then
        
        MsgBox "実行しました"
        
    End If
    
End Sub

選択セルを「1列目」に変更して、マクロを実行してみます。

「1列目」に変更

選択セルを「1列目」に変更して、マクロを実行してみます

選択セルを「1列目」以外に変更しても、実行されないです。

「1列目」以外に変更

選択セルを「1列目」以外に変更しても、実行されないです

実行されないですね。

実行するセル範囲を「1列目」に限定できました。

行を指定して実行

選択セルの変更時に、実行する「行」を指定してみます。

「1行目」に変更した場合に実行

「1行目」に変更した場合に実行するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '「1行目」の場合
    If Target.Row = 1 Then
        
        MsgBox "実行しました"
        
    End If
    
End Sub

選択セルを「1行目」に変更して、マクロを実行してみます。

「1行目」に変更

選択セルを「1行目」に変更して、マクロを実行してみます

選択セルを「1行目」以外に変更しても、実行されないです。

「1行目」以外に変更

選択セルを「1行目」以外に変更しても、実行されないです

実行されないです。

実行するセル範囲を「1行目」に限定できました。

セル範囲を指定して実行

選択セルの変更時に、実行するセル範囲を指定してみます。

「A1」に変更した場合に実行

「A1」に変更した場合に実行するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '「A1」の場合
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        
        MsgBox "実行しました"
        
    End If
    
End Sub

セル範囲を指定する場合は、「Intersect」が使えます。

「InterSect」の使い方です。

「InterSect」の使い方

「InterSect」は2つの範囲で、重なるセル範囲を返します。

「InterSect」は2つの範囲で、重なるセル範囲を返します

2つの範囲で、重なるセルがない場合は、「Nothing」を返します。

2つの範囲で、重なるセルがない場合は、「Nothing」を返します

今回は、「If Not Intersect(範囲1, 範囲2) Is Nothing Then」となっています。

なので、「Nothing」では「ない」となりますので、範囲1と範囲2の重なる部分がある場合に、実行します。

「A1」に選択セルを変更すると、メッセージを表示することができます。

選択セルを「A1」に変更して、マクロを実行してみます。

「A1」に変更

選択セルを「A1」に変更して、マクロを実行してみます

選択セルを「A1」以外に変更しても、マクロは実行されないです。

「A1」以外に変更

選択セルを「A1」以外に変更しても、マクロは実行されないです

実行するセル範囲を「A1」に限定できました。

複数のセル範囲を指定して実行

選択セルの変更時に、実行するセル範囲に「複数」指定してみます。

「A1:B2」に変更した場合に実行

「A1:B2」に変更した場合に実行するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '「A1:B2」の場合
    If Not Intersect(Target, Range("A1:B2")) Is Nothing Then
        
        MsgBox "実行しました"
        
    End If
    
End Sub

選択セルを「A1」に変更して、マクロを実行してみます。

「A1」に変更

選択セルを「A1」に変更して、マクロを実行してみます

選択セルを「B2」に変更して、マクロを実行してみます。

「B2」に変更

選択セルを「B2」に変更して、マクロを実行してみます

選択セルを「A1:B2」以外に変更しても、マクロは実行されないです。

「A1:B2」以外に変更

選択セルを「A1:B2」以外に変更しても、マクロは実行されないです

実行するセル範囲を「A1:B2」に限定できました。

とびとびのセル範囲を指定して実行

選択セルの変更時に、実行する範囲に「とびとびのセル範囲」を指定してみます。

「A1」か「A3」に変更した場合に実行

「A1」か「A3」に変更した場合に実行するVBAコードです。

「A1」と「A3」を「Union」で結合するところがポイントです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '「A1」と「A3」を結合
    Dim A
    Set A = Union(Range("A1"), Range("A3"))
    
    '「A1かA3」の場合
    If Not Intersect(Target, A) Is Nothing Then
        
        MsgBox "実行しました"
        
    End If
    
End Sub

選択セルを「A1」に変更して、マクロを実行してみます。

「A1」に変更

選択セルを「A1」に変更して、マクロを実行してみます

選択セルを「A3」に変更して、マクロを実行してみます。

「A3」に変更

選択セルを「A3」に変更して、マクロを実行してみます

選択セルを「A1」と「A3」以外に変更しても、マクロは実行されないです。

「A1」と「A3」以外に変更

選択セルを「A1」と「A3」以外に変更しても、マクロは実行されないです

実行するセル範囲を「A1」と「A3」に限定できました。

ちょっと応用

ちょっと応用で、選択セルを強調する、というのをやってみます。

選択セルの強調

やりたいことは、選択したセルを強調したい、ということです。

選択セルを強調したい

やりたいことは、選択したセルを強調したい、ということです

手順としては、

  • 条件付き書式で、選択セルの「行」と「列」を塗りつぶす数式を設定
  • 選択セルの変更時に、表示を更新するVBAを作成

という流れです。

まずは、条件付き書式を設定していきます。

新しいルールを作成

「ホーム」タブ→「条件付き書式」を選択します。

「ホーム」タブ→「条件付き書式」を選択します

「新しいルール」を選択します。

「新しいルール」を選択します

新しい書式ルールで、「数式を使用して、書式設定するセルを決定」を選択します。

新しい書式ルールで、「数式を使用して、書式設定するセルを決定」を選択します

数式を入力していきます。

数式を入力していきます

入力した数式が成り立つ場合に、書式を設定できます。

数式を入力

「選択セルの行と列」に一致する場合に条件成立する「数式」を入力します。

「選択セルの行と列」に一致する場合に条件成立する「数式」を入力します

「選択」しているセルの「行」と、「条件付き書式」が入力されているセルの「行」が一致した場合に条件成立する数式のイメージです。

「選択」しているセルの「行」と、「条件付き書式」が入力されているセルの「行」が一致した場合に条件成立する数式のイメージです

「選択」しているセルの「列」と、「条件付き書式」が入力されているセルの「列」が一致した場合に条件成立する数式のイメージです。

「選択」しているセルの「列」と、「条件付き書式」が入力されているセルの「列」が一致した場合に条件成立する数式のイメージです

これで、選択セルの「行」と「列」の条件付き書式の条件式が満足することになります。

次は、条件が満足した場合の書式を設定していきます。

書式を設定

条件を満たした場合の「書式」を設定します。

条件を満たした場合の「書式」を設定します

選択セルを強調する「塗りつぶし」の色を設定します。

選択セルを強調する「塗りつぶし」の色を設定します

条件を満たした場合の「書式」を設定できます。

条件を満たした場合の「書式」を設定できました

条件を満たした場合の「書式」を設定できました。

次は、適用先を設定していきます。

適用先を設定

適用先を設定します。

適用先を設定します

「Ctrl + A」でシート全体を選択して、シート全体に適用できるようにします。

「Ctrl + A」でシート全体を選択して、シート全体に適用できるようにします

適用先を「シート全体」に設定できます。

適用先を「シート全体」に設定できました

適用先を「シート全体」に設定できました。

選択セル変更時に表示を更新するVBAを作成していきます。

選択セル変更時に表示を更新

選択セル変更時に表示を更新するVBAコードです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    '表示をアップデート
    Application.ScreenUpdating = True
    
End Sub

VBE画面でみるとこんな感じです。

選択セルの変更で、表示を更新するVBAコードを記載します

選択セルの変更で、表示を更新するVBAコードを記載しました。

では、選択セルを変更してみます。

セルを選択してみる

「A1」を選択してみます。

「A1」を選択してみます

「C3」を選択してみます。

「C3」を選択してみます

「E5」を選択してみます。

「E5」を選択してみます

という感じで、選択セルの行と列を塗りつぶしして、選択セルを強調できました。

おわりに

この記事では、選択セルの変更時に実行するシートイベントについて、ご紹介しました。

「シートモジュール」で「Worksheet_SelectionChange」を使うことでできます。

選択セルの変更時に実行するセル範囲を指定するには、次のコードを使います。

  • 行や列の指定:「Row」や「Column」
  • セル範囲の指定:「Intersect」

選択セル変更時に実行するシートイベントを使う例として、選択セルの強調があります。

シートイベントをうまく実務で活用していきましょう。

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

関連する記事から探す

カテゴリから探す

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

サイト内を検索する

↓キーワードを入力する

アーカイブから探す