教えて!ExcelVBA!

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

ExcelVBAでフォーム内にShiftキーを押しながらクリックした時だけ処理を実行するボタンを設定する方法

構文

構文は以下の通りです。

Private Sub コマンドボタン名_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Shift = 1 Then
        ' Shiftキーが押された状態でクリックされた時の処理
    End If
End Sub

解説

コマンドボタン名_MouseUpは、指定されたコマンドボタン(コマンドボタン名)がクリックされたときに発生します。Buttonは、クリックされたマウスのボタン(左、右、中)を示します。Shiftは、ShiftキーやCtrlキー、Altキーが押されているかどうかを示します。Shiftキーが押されている場合は1となります。X, Yは、クリックされた位置の座標です。

【Button値:どのマウスボタンがクリックされたかを示します】

内容
1 左ボタン
2 右ボタン
4 中央ボタン

【Shift値:特定の修飾キー(Shift、Ctrl、Alt)が押されているかを確認できます】

内容
1 Shiftキー
2 Ctrlキー
4 Altキー

プログラミング例

具体的なプログラミング例を紹介します。

Private Sub 実行ボタン_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Shift = 1 Then
        MsgBox "Shiftキーが押されました"
    Else
        MsgBox "Shiftキーが押されていません"
    End If
End Sub

上記のプログラムは、ボタン名を実行ボタンとし、Shiftキーが押されながらクリックされた場合にはメッセージボックスで「Shiftキーが押されました」と表示します。それ以外の場合には、「Shiftキーが押されていません」と表示されます。この仕組みにより、Shiftキーを押しながらの操作のみ特定の処理を実行することができます。

まとめ

フォーム内のボタンにShiftキーを押しながらクリックした場合のみ処理を実行するには、MouseUpイベントを使います。ShiftパラメータでShiftキーの押下状態を判定し、特定の処理を実行できます。