ワークシートからVBE
ワークシートイベント
ワークシート名で右クリックして「コードの表示(V)」を選択すると下記のVBE画面が開きます。
あるいはワークシートの中で「Alt」+「F11」(端末によって「Fn」キーも同時に押してください)でも開きます。
VBE画面が開いたら左の赤枠で「Worksheet]を選ぶと
① Worksheet_SelectionChange(ByVal Target As Range)
End sub
表示され、続いて右の赤枠で「Change」を選択すると
② Worksheet_Change(ByVal Target As Range)
End sub
が追加されます。この枠内にプログラムを書くと
①はセルの選択が現在のセルから他のセルに変更したときにプログラムが実行されます。
②はワークシートのセル内容に変更があったときにプログラムが実行されます。
プログラムが開始する起点(イベント)としての役割を果たします。
下に拡大して説明します。
ByVal Target As Rangeとは
Private Sub Worksheet_Change(ByVal Target As Range)にあるByVal Target As Rangeとは
ByVal は値渡し
Target は変数名
As RangeはRangeオブジェクトの型として使用することを宣言しています。
ByVal と対比されるのがByRef、参照渡しです。
プログラム(仮にA)には処理の途中で他のプログラム(仮にB)を呼び出すことがあります。
AからBに変数(Z) = (X)を投げてBの処理で(Z) = (Y)変更された場合、プログラムAでは影響を受けず(Z) = (X)のままなのがByVal、 (Z) = (Y)に変更されるのがByRefです。
使用する場面でご理解いただければ十分です。
Private Sub Worksheet_Change(ByVal Target As Range)
Private Sub Worksheet_Change(ByVal Target As Range)にプログラムを書き込んでいきます。
Application.EnableEvents = False
cr1 = Target.Row
cc1 = Target.Column
If cr1 = 1 And cc1 = 1 Then
Cells(2, 1) = “Test1”
End If
Application.EnableEvents = True
End Sub
一節ごとに解説していきます。
Application.EnableEvents
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
ループを防ぐためにApplication.EnableEvents = Falseで新たなアプリケーションのイベント(発生)を不能にした後にセルに値を代入し、その後にApplication.EnableEvents = Trueで元に戻します。セルに値を代入する部分(change)を囲み、ループを回避します。Application.EnableEvents = Trueを忘れないでください。
Target
cr1 = Target.Row
cc1 = Target.Column
If文
If cr1 = 1 And cc1 = 1 Then
Cells(2, 1) = “Test1”
End If
End IfでIf文は終了します。
EXCEL.xlsmでの保存(マクロを有効にする)
VBE画面に上記のコードを移した後マクロ有効ファイルとして一旦保存終了します。
ファイル名:各自で自由に決めてください。
ファイルの種類:マクロ有効ブック(*.xlsm)
再度開くとマクロが有効になります。
動作確認は次回にします。