イベントの使い方 [ExcelのVBA]
イベントの使い方
イベントとは「コマンドボタンをクリック」や「テキストボックスの文字列が変更」した時などに発生するプロシージャです。そのプロシージャ内にイベントが発生した際のコードを記述してプログラムを動作させます。
イベントの追加方法は「イベントの追加方法」をご覧ください。
各コントロールの共通イベント
各コントロールの共通イベントの解説です。共通といってもここで紹介する全てのイベントが各コントロールにあるわけではなく、コントロールによってはイベントが存在しない場合があります。
Click
コントロールがクリックされた時にイベントが発生します。
[コード例 - コマンドボタン]
Private Sub CommandButton1_Click() Debug.Print "クリックされました。" End Sub
DblClick
コントロールがダブルクリックされた時にイベントが発生します。
[コード例 - コマンドボタン]
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Debug.Print "ダブルクリックされました。" End Sub
TrueにするとDblClickイベントが取り消されます。(デフォルトはFalse)
※通常使用では引数の「Cancel」は使用しません。
Change
コントロールの値が変更された時にイベントが発生します。
[コード例 - テキストボックス]
Private Sub TextBox1_Change() Debug.Print "テキストボックスが編集されました。" End Sub
KeyDown
コントロール上でなんらかのキーが押された時にイベントが発生します。
[コード例 - テキストボックス]
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim Shift_Str As String Dim Other_Str As String ' Shiftキーの状態 If Shift = 1 Then Shift_Str = "※Shift = オン" Else Shift_Str = "※Shift = オフ" End If ' 押されたキーが0-9ならば If (KeyCode.Value >= 48) And (KeyCode.Value <= 57) Then Debug.Print Chr(KeyCode.Value) & _ "(KeyCode=" & (KeyCode.Value) & ")が押されました。" & _ Shift_Str Exit Sub End If ' 押されたキーがA-Zならば If (KeyCode.Value >= 65) And (KeyCode.Value <= 90) Then Debug.Print Chr(KeyCode.Value) & _ "(KeyCode=" & (KeyCode.Value) & ")が押されました。" & _ Shift_Str Exit Sub End If ' 押されたキーが0-9(テンキー)ならば If (KeyCode.Value >= 96) And (KeyCode.Value <= 105) Then Debug.Print Chr(KeyCode.Value - 48) & _ "(KeyCode=" & (KeyCode.Value) & ")が押されました。" & _ Shift_Str Exit Sub End If ' 押されたキーがF1-F16ならば If (KeyCode.Value >= 112) And (KeyCode.Value <= 127) Then Debug.Print "F" & CStr(KeyCode.Value - 111) & _ "(KeyCode=" & (KeyCode.Value) & ")が押されました。" & _ Shift_Str Exit Sub End If ' その他のキー Select Case KeyCode.Value Case vbKeyBack: Other_Str = "BackSpace" Case vbKeyTab: Other_Str = "Tab" Case vbKeyClear: Other_Str = "Clear" Case vbKeyReturn: Other_Str = "Enter" Case vbKeyShift: Other_Str = "Shift" Case vbKeyControl: Other_Str = "Ctrl" Case vbKeyMenu: Other_Str = "Alt" Case vbKeyPause: Other_Str = "Pause" Case vbKeyCapital: Other_Str = "CapsLock" Case vbKeyEscape: Other_Str = "Esc" Case vbKeySpace: Other_Str = "Space" Case vbKeyPageUp: Other_Str = "PageUp" Case vbKeyPageDown: Other_Str = "PageDown" Case vbKeyEnd: Other_Str = "End" Case vbKeyHome: Other_Str = "Home" Case vbKeyLeft: Other_Str = "←" Case vbKeyUp: Other_Str = "↑" Case vbKeyRight: Other_Str = "→" Case vbKeyDown: Other_Str = "↓" Case vbKeySelect: Other_Str = "Select" Case vbKeyPrint: Other_Str = "PrintScreen" Case vbKeyExecute: Other_Str = "Execute" Case vbKeySnapshot: Other_Str = "Snapshot" Case vbKeyInsert: Other_Str = "Ins" Case vbKeyDelete: Other_Str = "Del" Case vbKeyHelp: Other_Str = "Help" Case vbKeyNumlock: Other_Str = "NumLock" Case vbKeyMultiply: Other_Str = "*" Case vbKeyAdd: Other_Str = "+" Case vbKeySeparator: Other_Str = "Enter" Case vbKeySubtract: Other_Str = "-" Case vbKeyDecimal: Other_Str = "." Case vbKeyDivide: Other_Str = "/" ' 以下のコードは環境によって異なる Case 186: Other_Str = ":*" Case 187: Other_Str = ";+" Case 188: Other_Str = ",<" Case 189: Other_Str = "- _" Case 190: Other_Str = ".>" Case 191: Other_Str = "/ ?" Case 192: Other_Str = "@`" Case 219: Other_Str = "[ {" Case 220: Other_Str = "\ |" Case 221: Other_Str = "] }" Case 222: Other_Str = "^~" Case 226: Other_Str = "\_" ' 不明 Case Else: Other_Str = "不明" End Select Debug.Print Other_Str & _ "(KeyCode=" & (KeyCode.Value) & ")が押されました。" & _ Shift_Str End Sub
[結果]
KeyPress
コントロール上で英数字記号キーが押された時にイベントが発生します。
[コード例 - テキストボックス]
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Dim Shift_Str As String ' 押されたキーが0-9ならば If (KeyAscii.Value >= 48) And (KeyAscii.Value <= 57) Then Debug.Print Chr(KeyAscii.Value) & _ "(KeyAscii=" & (KeyAscii.Value) & ")が押されました。" & _ Shift_Str Exit Sub End If ' 押されたキーがA-Zならば If (KeyAscii.Value >= 65) And (KeyAscii.Value <= 90) Then Debug.Print Chr(KeyAscii.Value) & _ "(KeyAscii=" & (KeyAscii.Value) & ")が押されました。" Exit Sub End If ' 押されたキーがa-zならば If (KeyAscii.Value >= 97) And (KeyAscii.Value <= 122) Then Debug.Print LCase(Chr(KeyAscii.Value - 32)) & _ "(KeyAscii=" & (KeyAscii.Value) & ")が押されました。" Exit Sub End If ' 記号 Debug.Print "記号" & _ "(KeyAscii=" & (KeyAscii.Value) & ")が押されました。" End Sub
アスキーコード値。詳細はWikipediaへ
[結果]
KeyUp
コントロール上でなんらかのキーが離された時にイベントが発生します。
[コード例 - テキストボックス]
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) ' 引数の扱いはTextBox1_KeyDownと同様 End Sub
MouseDown
コントロール上でマウスのボタンが押された時にイベントが発生します。
[コード例 - ユーザーフォーム]
Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim Shift_Str As String ' Shiftキーの状態 If Shift = 1 Then Shift_Str = "※Shift = オン" Else Shift_Str = "※Shift = オフ" End If If Button = vbKeyLButton Then Debug.Print "マウスの左ボタンが押されました。" & _ Shift_Str End If If Button = vbKeyRButton Then Debug.Print "マウスの右ボタンが押されました。" & _ Shift_Str End If If Button = vbKeyMButton Then Debug.Print "マウスの中央ボタンが押されました。" & _ Shift_Str End If ' 座標の表示 Debug.Print "座標X = " & CStr(X) & " 座標Y = " & CStr(Y) End Sub
マウスのボタン値。詳細はマイクロソフト公式サイトへ
引数 Shift
Shiftキーがオンの時は1、オフの場合は0
引数 X
マウスがあった場所の座標値X(横軸)
引数 Y
マウスがあった場所の座標値Y(縦軸)
[結果]
MouseMove
コントロール上でマウスが移動した時にイベントが発生します。
[コード例 - ユーザーフォーム]
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ' 引数の扱いはUserForm_MouseDownと同様 End Sub
MouseUp
コントロール上でマウスのボタンが離された時にイベントが発生します。
[コード例 - ユーザーフォーム]
Private Sub UserForm_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) ' 引数の扱いはUserForm_MouseDownと同様 End Sub
Visual Basicのコントロール
共通操作 プロパティの使い方 イベントの使い方 |
ラベル | |
テキストボックス | |
コンボボックス | |
リストボックス | |
チェックボックス | |
オプションボタン | |
トグルボタン | |
フレーム | |
コマンドボタン | |
タブストリップ | |
マルチページ | |
スクロールバー | |
スピンボタン | |
イメージ | |
ユーザーフォーム |
エクセル講座のクイックリンク
関連記事
前の記事: | プロパティの使い方 [ExcelのVBA] |
次の記事: | ラベルの使い方 [ExcelのVBA] |