エクセルVBAを使用しているシート上の特定の列のセルをクリックすると指定したユーザーフォームが表示されると便利だと思いませんか?
さらにA列のセルをクリックしたらフォーム1を表示、B列のセルをクリックしたらフォーム2を表示させる複数の場合もやりたいですよね。
SelectionChangeに書き込めば簡単にできますよ!
WorksheetのSelectionChangeに記述する
シート選択
VBA画面でセルをクリックしたらユーザーフォームを表示させたいシートを、Objectsから選択します。
![セルをクリックしたらフォーム表示](https://tripbowl.com/excel-vba/wp-content/uploads/2022/03/excel-vba-Objects.jpg)
オブジェクトの変更
シートを選んだらオブジェクト「General」の▼をクリックして「Worksheet」に変更します。
![セルをクリックしたらフォーム表示2](https://tripbowl.com/excel-vba/wp-content/uploads/2022/03/excel-vba-Objects2-1024x373.jpg)
VBAコードを記載する
Worksheetを選択すると自動的にSelectionChangeに関するSubとEnd Subが記載されますので、この間の部分に「セルをクリックした場合にフォームが表示する」というVBAコードを書き込めば完成です。
![セルをクリックしたらフォーム表示](https://tripbowl.com/excel-vba/wp-content/uploads/2022/03/excel-vba-Objects3.jpg)
VBAコード記述
ここでは、下記のような出納帳でフォームを表示させます。
- 出金額の「H」列のセルをクリックすると出金用のフォーム表示
- 入金額の「I」列のセルをクリックすると入金用のフォーム表示
![セルをクリックしたらフォーム表示4](https://tripbowl.com/excel-vba/wp-content/uploads/2022/03/excel-vba-Objects4-1024x335.jpg)
見出し
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 8 Then
UserForm4.Show
ElseIf Target.Column = 9 Then
UserForm6.Show
End If
End Sub
見出し
- ワークシート上のセルの選択範囲が変更されたら時に実行するマクロ
- もし、8列目(H列)のセルが選択されたら(クリックされたら)
- ユーザーフォーム4を表示する
- そうではなく、もし9列目(I列)のセルが選択されたら(クリックされたら)
- ユーザーフォーム6を表示する
- IFステートメント終了
- マクロ記録終了
![とりっぷぼうる](https://tripbowl.com/excel-vba/wp-content/uploads/2017/12/vba150x150.jpg)
とりっぷぼうる
このように、複雑ではなくシンプルなVBAコードを書くだけで、クリックしたらフォームが表示できるようになりました。