VBAプログラム(ワークシートイベント1)

ワークシートから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)にプログラムを書き込んでいきます。

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

Worksheet_Changeイベントはワークシートに変更があったときに起動するため、Worksheet_Changeイベント内にセル内容の変更(change)の記述があった場合にループ(繰り返し)してしまいます。
ループを防ぐためにApplication.EnableEvents = Falseで新たなアプリケーションのイベント(発生)を不能にした後にセルに値を代入し、その後にApplication.EnableEvents = Trueで元に戻します。セルに値を代入する部分(change)を囲み、ループを回避します。Application.EnableEvents = Trueを忘れないでください。

Target

cr1 = Target.Row
cc1 = Target.Column

現在選択しているセルのTarget.Rowは、Target.Columnはを取得します。

If文

If cr1 = 1 And cc1 = 1 Then
  Cells(2, 1) = “Test1”
End If

Ifもし1行1列目(A1)のセルで変更があった場合に、Then 2行1列目A2セルに”Text1”の文字を代入します。
End IfでIf文は終了します。

EXCEL.xlsmでの保存(マクロを有効にする)

VBE画面に上記のコードを移した後マクロ有効ファイルとして一旦保存終了します。
ファイル名:各自で自由に決めてください。
ファイルの種類:マクロ有効ブック(*.xlsm)

再度開くとマクロが有効になります。
動作確認は次回にします。

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