教えて!ExcelVBA!

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

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

f:id:m_kbou:20200515084958p:plain

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

 

 

構文

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

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

[説明]:

ブック内のシートを右クリックした時に発生するイベントプロシージャにはSheetBeforeRightClickプロシージャを使用します。[実行する処理内容]にはブック内のシートを右クリックした際に実行させる内容を記述します。ShとTargetとCancelは引数となり、shはダブルクリックされたシートのオブジェクト、Targetは右クリック時にマウスに最も近いセルとなります。また、Cancelに「True」をセットするとイベントを中止し、「False」をセットするとイベントを実行します。初期値では「False」がセットされています。内容を纏めると、「ブック内のシートを右クリックした時に[実行する処理組内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  MsgBox "シートが右クリックされました。"
End Sub

 

作り方

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

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

f:id:m_kbou:20200515084943p:plain

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

f:id:m_kbou:20200515085021p:plain

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

f:id:m_kbou:20200515085036p:plain

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

f:id:m_kbou:20200515085050p:plain

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

f:id:m_kbou:20200506112910p:plain

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

f:id:m_kbou:20200515085137p:plain

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

f:id:m_kbou:20200515085149p:plain

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

f:id:m_kbou:20200515085221p:plain

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

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

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

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

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  MsgBox "シートが右クリックされました。"
End Sub

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

f:id:m_kbou:20210618155329p:plain

[実行例①]:

今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例①が記述されています。

(実行前)

Book1.xlsmブック内のSheet1シートを右クリックします。

f:id:m_kbou:20210618155344p:plain

(実行後) 

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

f:id:m_kbou:20210618155359p:plain

[サンプル①]:

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

drive.google.com

(例②)ブック内のシートが右クリックされた時に右クリックされたシート名を表示する方法

ブック内のシートが右クリックされた時に右クリックされたシート名を表示する方法について紹介します。

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

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  MsgBox Sh.Name
End Sub

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

f:id:m_kbou:20210618160244p:plain

[実行例②]:

今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例②が記述されています。

(実行前)

Book1.xlsmブック内のSheet1シートを右クリックします。

f:id:m_kbou:20210618160301p:plain

(実行後) 

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

f:id:m_kbou:20210618160317p:plain

[サンプル②]:

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

drive.google.com

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

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

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

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, 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:20210618161425p:plain

[実行例③]:

今回の例としては、Book1.xlsmブックが開かれており、Book1.xlsmブックには上記で説明したプログラミング例③が記述されています。

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

(実行前)

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

f:id:m_kbou:20210618161441p:plain

(実行後) 

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

f:id:m_kbou:20210618161454p:plain

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

(実行前)

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

f:id:m_kbou:20210618161514p:plain

(実行後) 

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

f:id:m_kbou:20210618161528p:plain

[サンプル③]:

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

drive.google.com

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

 

おわりに

今回はブック内のシートを右クリックした時に発生するイベントプロシージャの作成方法について説明しました。オブジェクトボックスでオブジェクトを選択すると、そのオブジェクト既定の「Workbook_Open」イントプロシージャが自動的に作成(上記(5)の内容)されます。不要な場合は削除して下さい。