記事キャッチ画像  (27) Excelワークシートの SelectionChange 、 BeforeRightClick イベントを学習する! 

 1. セルの選択範囲を変更した時(セルの移動も含む)、 SelectionChange イベントが発生 

 2. 別のセルを右クリックした場合、 SelectionChange の後に BeforeRightClick イベントが発生 

  「広告」  
 

 (27) Excelワークシートの SelectionChange 、 BeforeRightClick イベントを学習する! 

Excel メニューバーの [ヘルプ] - [更新プログラムのチェック] にて、適用されていないアップデートがあれば行ってください。 

Excel 2016 for Mac 環境での説明となりますので、 Mac版 Excel 2011 では( VBA が利用できますが )同じ結果にならない場合があるかもしれません。

現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)

( ユーザー定義関数 のVBAコードを含んだ)前回使用した XLSM ファイルを、「マクロを有効」にして開きます。

15

現在ワークシートが2つ存在するはずだが、もう1つ ワークシートを追加する。
VBE にて 3つめのワークシートを選択後、対応するモジュールに以下のコードを入力するかそのままコピーして貼り付ける。(緑色の部分はコメントのため、省略可)

Rem
Rem    Sheet3 (Sheet3)
Rem

Option Explicit

'----------------------------------------
'    Event: Worksheet_SelectionChange()
'----------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim aRange As Range
    Dim sum As Long
    Dim n As Integer
    sum = 0
    Range("A1:I9").Interior.ColorIndex = 0
    If Target.Address(False, False) = "A1" Then
        For n = 1 To 9
            Cells(n, 1).Value = n
        Next n
        For n = 2 To 9
            Cells(1, n).Formula = "=A1*" & CStr(n)
        Next n

        Application.EnableEvents = False
            Range("B1:I1").Select
            Selection.Copy
            Range("B2:I9").Select
            ActiveSheet.Paste
            Range("A1").Select
        Application.EnableEvents = True

        MsgBox "Sum = " & Range("A1").Value
    Else
        For Each aRange In Selection
            sum = sum + aRange.Value
        Next aRange
        MsgBox "Sum = " & sum
    End If
End Sub

'----------------------------------------
'    Event: Worksheet_BeforeRightClick()
'----------------------------------------
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Target.Interior.Color = vbYellow
Rem Cancel = True
End Sub


 1. セルの選択範囲を変更した時(セルの移動も含む)、 SelectionChange イベントが発生 

3つめのワークシートには、何も入力しなくとも良い。
「A1」をクリックすると、 九九 の表を「A1:I9」に展開するようにしておいた。

「A1:A9」に 1 〜 9 を入力した後、「B1:I1」に数式を設定し、「B1:I1」をコピーして「B2:I9」に貼り付けている。
Range オブジェクトで Select メソッドを実行すると再度 SelectionChange イベントが発生してしまうため、前後で Application.EnableEvents を設定し イベントを抑制
なお、プロシージャ先頭にて「A1」以外が選択された場合も含め、「A1:I9」の背景色をリセットしている。

13

セルの選択範囲( Selection )の値を加算して、MsgBox表示する!
もちろん、数式( .Formula )が設定されているセルも、 .Value を参照すれば 数式の結果 を示す。
また、セル1つのみ選択した場合も イベントはちゃんと発生することを確認して欲しい。

 2. 別のセルを右クリックした場合、 SelectionChange の後に BeforeRightClick イベントが発生 

右クリックで別のセルを選択した場合、まず SelectionChange イベントが発生し、次に BeforeRIghtClick イベントが発生することも確認して欲しい。
なお、トラックパッド の右クリック(代替)操作でも、ちゃんと BeforeRIghtClick イベントは発生する。

この確認のため、 BeforeRIghtClick イベントプロシージャには 対象セルの背景色を 黄色に変更するコードを入れた。
最終行がコメントにしてあるが、 Cancel = True を実行すると デフォルトのダイアログ表示が行われなくなる。 実際にコメントを外して、試してみればよく解る。
 
45

まず、 SelectionChange イベントが発生。

22

次に、 BeforeRIghtClick イベントが発生。

イベントの発生順はとても重要なので、よく分からない場合はテストコードを書いて確認したほうが良い。


次回も、ワークシートのイベントプロシージャを学習します!


お疲れ様でした!
[command] + [Q] にてExcel を終了時、「作業中のブック」を保存するか確認のダイアログ画面が表示されるため 「保存」しましょう。
現状、 VBE 内で日本語を記述すると(貼り付けのみ可能な場合あり)乱れたり、保存時にクラッシュすることが多いため、 VBAコード は「未変換の英数字のみ」で記述してください。(テキストエディタからの貼り付けは可能)


最後まで読んでいただき、ありがとうございます。
ぜひ、右側の「人気ブログランキング」投票に ご協力ください。
また、お越しくださいませ。
// アタル

  「広告」