【VBA】ダブルクリックしたセルに応じて、表示するユーザーフォームを切り替える方法

目次

はじめに

Excelシートを操作画面として使う際、「特定のセルをダブルクリックしたら、関連する入力フォームを開きたい」と考えたことはありませんか? 例えば、顧客名のセルをダブルクリックしたら顧客情報フォームを、商品名のセルなら商品詳細フォームを開く、といった具合です。

VBAの Worksheet_BeforeDoubleClick イベントを使えば、このような「ダブルクリックされた場所に応じて、実行する処理を変える」という、非常にインタラクティブな機能を実装できます。

この記事では、ユーザーがダブルクリックしたセルの場所を判定し、それに応じて異なる2種類のユーザーフォームを表示する、実用的なマクロの作り方を解説します。


セルに応じてフォームを切り替えるVBAサンプルコード

このコードは、シートモジュールに記述します。特定のワークシート(例: Sheet1)のタブを右クリックし、「コードの表示」を選択して表示されるコードウィンドウに貼り付けてください。

この例では、以下の処理を実装します。

  • C3セルをダブルクリック → InputForm_User(ユーザー情報フォーム)を表示
  • C5:C10の範囲のセルをダブルクリック → InputForm_Product(商品情報フォーム)を表示

シートモジュールの完成コード

' シートがダブルクリックされたときに実行されるイベント
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    ' --- C3セルがダブルクリックされたか判定 ---
    If Not Intersect(Target, Me.Range("C3")) Is Nothing Then
        ' ユーザー情報フォームを表示
        InputForm_User.Show
        ' ダブルクリック後の編集モードをキャンセル
        Cancel = True
        
    ' --- C5:C10の範囲がダブルクリックされたか判定 ---
    ElseIf Not Intersect(Target, Me.Range("C5:C10")) Is Nothing Then
        ' 商品情報フォームを表示
        InputForm_Product.Show
        ' ダブルクリック後の編集モードをキャンセル
        Cancel = True
        
    End If

End Sub

コードの解説

Private Sub Worksheet_BeforeDoubleClick(...)

これは特別な名前のイベントプロシージャで、このコードが書かれているワークシート上で、いずれかのセルがダブルクリックされた瞬間に自動的に実行されます。このプロシージャには、2つの重要な引数が渡されます。

  • Target As Range: ダブルクリックされたセル(範囲)そのものを表します。この Target がどのセルなのかを調べることで、場所の判定が可能になります。
  • Cancel As Boolean: この引数に True を設定すると、ダブルクリックの本来の動作(セルの編集モードに入る)をキャンセルできます。フォームを表示する際には、通常 True に設定します。

If Not Intersect(Target, Me.Range("C3")) Is Nothing Then

この一行が、ダブルクリックされた場所を判定するための核心部分です。

  • Intersect 関数: 複数のセル範囲が交差する(重なる)部分を返します。もし範囲が全く交差しない場合は Nothing(何もない)を返します。
  • Intersect(Target, Me.Range("C3")): 「ダブルクリックされたセル(Target)」と「C3セル(Me.Range("C3"))」の重なりを調べています。
  • Is Nothing: 重なりがないかどうかを判定します。
  • Not ... Is Nothing: 全体として、「重なりがない、わけではない」=「重なっている部分がある」という意味になります。つまり、「ダブルクリックされたセルがC3セルと重なっている場合(=C3セルがダブルクリックされた場合)」という条件式になります。

Cancel = True

ユーザーフォームを表示させた後、元のセルが編集モードに入ってしまうと不自然なため、この命令でダブルクリックのデフォルト動作をキャンセルしています。


まとめ

今回は、Worksheet_BeforeDoubleClick イベントと Intersect 関数を組み合わせて、ダブルクリックされたセルに応じて表示するユーザーフォームを切り替える方法を解説しました。

  • Worksheet_BeforeDoubleClick イベントで、ダブルクリック操作を検知する。
  • Target 引数で、どのセルが操作されたかを知る。
  • Intersect 関数で、Target と特定のセル範囲の重なりを判定する。
  • Cancel = True で、セルが編集モードに入るのを防ぐ。

このテクニックを応用すれば、Excelシートをまるでアプリケーションのメニュー画面のように活用することができます。ユーザーにとって直感的で使いやすいツールを作成するために、ぜひマスターしてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次