教えて!ExcelVBA!

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

【ExcelVBA シート操作】シートがダブルクリックされた時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

f:id:m_kbou:20200521074403p:plain

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

 

 

構文

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  [実行する処理内容]
End Sub

[説明]:

シートがダブルクリックされた時に実行されるイベントプロシージャです。

[実行する処理内容] イベントが実行された時に処理する内容を記述します。

このイベントプロシージャにはオプションが設定されています。
オプションの内容は以下の通りとなります。

オプション 内容
Target ダブルクリック時のマウスに最も近いセルが渡されます。
Cancel イベントの実行/中止を指定できます。
・「True」をセットした場合:イベントを中止します。
・「False」をセットした場合:イベントを実行します。
※初期値は「False」がセットされています。

[記述例]:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  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

※この時点で「<orksheet_SelectionChange」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっている様です。)

f:id:m_kbou:20200520115838p:plain

(5)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20200520115907p:plain

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

f:id:m_kbou:20200521074435p:plain

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

f:id:m_kbou:20200521074450p:plain

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

(例①)シートがダブルクリックされた時にメッセージを表示する方法

シートがダブルクリックされた時にメッセージを表示する方法について紹介します。

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  MsgBox "ダブルクリックされました。"

End Sub

内容は、「シートがダブルクリックされた時に”ダブルクリックされました。”をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210621190105p:plain

[実行例①]:

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

(実行前)

Sheet1シートをダブルクリックします。

f:id:m_kbou:20210621190119p:plain

(実行後) 

Sheet1シートがダブルクリックされると同時に「ダブルクリックされました。」が表示されます。(※シートがダブルクリックされた事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210621190134p:plain

[サンプル①]:

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

drive.google.com

(例②)シートがダブルクリックされた時にダブルクリックされたセルに対し値が入力されているか否かを判定して表示する方法

シートがダブルクリックされた時にダブルクリックされたセルに対し値が入力されているか否かを判定して表示する方法について紹介します。

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

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

  If (IsEmpty(Target) = True) Then
    MsgBox "対象セルには値が入力されていません。"
    Cancel = True
  Else
    MsgBox Target
  End If

End Sub

内容は、「シートのダブルクリックされたセルに値が入力されていない場合は、”対象セルには値が入力されていません。”をMsgBoxで表示し、イベントを中止して下さい。又は、値が入力されている場合には入力されている値をMsgBoxで表示して下さい。」との意味になります。

f:id:m_kbou:20210621191445p:plain

[実行例②]:

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

・セルに値が入力されていない場合

(実行前)

Sheet1シートのA1セルをダブルクリックします。(※A1セルは空白となります。)

f:id:m_kbou:20210621191502p:plain

(実行後) 

A1セルがダブルクリックされると同時に「対象セルには値が入力されていません。」が表示されます。(※シートがダブルクリックされた事で、プロシージャが実行されてメッセージが表示されました。)

f:id:m_kbou:20210621191517p:plain

・セルに値が入力されている場合

(実行前)

Sheet1シートのA1セルをダブルクリックします。(※A1セルには”●”が入力されています。)

f:id:m_kbou:20210621191533p:plain

(実行後) 

A1セルがダブルクリックされると同時にA1セルに入力されている値「●」が表示されます。(※シートがダブルクリックされた事で、プロシージャが実行されてA1セルの値が表示されました。)

f:id:m_kbou:20210621191548p:plain

[サンプル②]:

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

drive.google.com

シートがダブルクリックされた時に発生するイベントプロシージャの作成方法についての説明は以上です。

 

おわりに

今回はシートがダブルクリックされた時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Worksheet_SelectionChange」イントプロシージャが自動的に作成されます。不要な場合は削除して下さい。また、類似の内容としてブック内のシートがダブルクリックされた時に発生するイベントプロシージャもあります。ブックの場合とシートの場合との違いは、ブックは全シートに対してイベントが発生しますが、シートは対象のシートのみにイベントが発生します。状況により使い分けて下さい。