教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA シート操作】シートで選択範囲が変更された時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

f:id:m_kbou:20200521065106p:plain

VBAでは操作をきっかけとして自動的に実行されるプロシージャの事を「イベントプロシージャ」と言います。自動実行のきっかけとなる操作の事を「イベント」と呼び、「イベント」はブックやワークシート、ユーザーフォーム等のオブジェクトに対して発生します。このイベントを利用して「シートで選択範囲が変更された時に発生するイベントプロシージャの作り方」について紹介します。

 

 

構文

イベントプロシージャの記述方法は以下の通りです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  [実行する処理内容]
End Sub

[説明]:

シートで選択範囲が変更されたが時に発生するイベントプロシージャにはSelectionChangeプロシージャを使用します。[実行する処理内容]にはシートで選択範囲が変更された際に実行させる内容を記述します。Targetは引数となり、Targetは新しく選択したセル範囲となります。内容を纏めると、「シートで選択範囲が変更された場合には[実行する処理内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "選択範囲が変更されました。"
End Sub

 

作り方

(1)VBE(VBA記述画面)を開きます。

※画面の開き方はこちらの手順を参考にして下さい。

f:id:m_kbou:20200520115609p:plain

(2)シートオブジェクトをダブルクリックします。

※今回は例としてSheet1をダブルクリックします。

f:id:m_kbou:20200520115634p:plain

(3)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20200520115736p:plain

(4)プルダウン一覧の中から「Worksheet」を選択します。

f:id:m_kbou:20200520115752p:plain

(5)「Worksheet_SelectionChange」イベントプロシージャが表示されます。

f:id:m_kbou:20200520115838p:plain

(6)(5)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を2つ紹介します。

(例①)シートで選択範囲が変更された時にメッセージを表示する方法

シートで選択範囲が変更された時にメッセージを表示する方法について紹介します。

[プログラミング例①]:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "選択範囲が変更されました。"
End Sub

内容は、「シートで選択範囲が変更された時に”選択範囲が変更されました。”をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210621181421p:plain

[実行例①]:

今回の例としては、Sheet1シートには上記で説明したプログラミング例①が記述されています。

(実行前)

Sheet1シートのB2セル~D5セルが選択されています。

f:id:m_kbou:20210621182925p:plain

(実行後) 

上記範囲とは別の範囲(A1セル)を選択した場合、「選択範囲が変更されました。」が表示されます。(※選択範囲が変更された事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210621181451p:plain

[サンプル①]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例②)シートで選択範囲が変更された時に新しい選択先の行と列を表示する方法

シートで選択範囲が変更された時に新しい選択先の行と列を表示する方法について紹介します。

[プログラミング例②]:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox "選択されたセルの行は「" & Target.Row & "」、列は「" & Target.Column & "」です。"
End Sub

内容は、「シートで選択範囲が変更された時に新しく選択された行と列をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210621183807p:plain

[実行例②]:

今回の例としては、Sheet1シートには上記で説明したプログラミング例②が記述されています。

(実行前)

Sheet1シートのB2セル~D5セルが選択されています。

f:id:m_kbou:20210621183822p:plain

(実行後) 

上記範囲とは別の範囲(E6セル)を選択した場合、「選択されたセルの行は「6」、列は「5」です。」が表示されます。(※選択範囲が変更された事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210621183835p:plain

[サンプル②]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

シートで選択範囲が変更された時に発生するイベントプロシージャの作成方法についての説明は以上です。

 

おわりに

今回はシートで選択範囲が変更された時に発生するイベントプロシージャの作成方法について説明しました。類似の内容にシートが変更された時に発生するイベントプロシージャもあります。こちらも参考にして下さい。