ホーム > カテゴリ > Excel・VBA >

イベントの使い方 [ExcelのVBA]

イベントの使い方

イベントとは「コマンドボタンをクリック」や「テキストボックスの文字列が変更」した時などに発生するプロシージャです。そのプロシージャ内にイベントが発生した際のコードを記述してプログラムを動作させます。

イベントの追加方法は「イベントの追加方法」をご覧ください。

Wikipediaで補足:イベント

各コントロールの共通イベント

各コントロールの共通イベントの解説です。共通といってもここで紹介する全てのイベントが各コントロールにあるわけではなく、コントロールによってはイベントが存在しない場合があります。

Click

コントロールがクリックされた時にイベントが発生します。

[コード例 - コマンドボタン]

Private Sub CommandButton1_Click()
  Debug.Print "クリックされました。"
End Sub

DblClick

コントロールがダブルクリックされた時にイベントが発生します。

[コード例 - コマンドボタン]

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  Debug.Print "ダブルクリックされました。"
End Sub

引数 Cancel
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

引数 KeyCode
キーコード値。詳細はマイクロソフト公式サイト

引数 Shift
Shiftキーがオンの時は1、オフの場合は0

[結果]

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

引数 KeyAscii
アスキーコード値。詳細は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

引数 Button
マウスのボタン値。詳細はマイクロソフト公式サイト

引数 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のコントロール

共通操作
 プロパティの使い方 イベントの使い方

ラベル
テキストボックス
コンボボックス
リストボックス
チェックボックス
オプションボタン
トグルボタン
フレーム
コマンドボタン
タブストリップ
マルチページ
スクロールバー
スピンボタン
イメージ
ユーザーフォーム

エクセル講座のクイックリンク

ホーム 新機能 基本(初級) 基本(中級) 基本(上級) 関数 マクロ VBA TIPS





関連記事



公開日:2015年06月27日 最終更新日:2015年07月06日
記事NO:01076