教えて!ExcelVBA!

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

【ExcelVBA フォーム&コントロール】Shiftキーを押しながらクリックした時だけ処理を実行するコマンドボタンを設定する方法を教えて!

構文

構文は以下の通りです。

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' Shiftキーが押されているか確認
    If Shift And vbShiftMask Then
        ' Shiftキーが押されている時の処理を記述
        MsgBox "Shiftキーを押しながらクリックしました。"
        ' ここに実行したい処理を追加
    End If
End Sub

Shiftキーを押しながらクリックした時の処理を行うには、CommandButton1_MouseUp イベントを使用します。これは、マウスボタンが離されたときに発生するイベントで、ここでShiftキーの状態を確認して処理を行います。このコードでは、vbShiftMask を使用してShiftキーが押されているかどうかを確認し、押されている場合にメッセージボックスを表示しています。

使い方

具体的な使い方を紹介します。

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' Shiftキーが押されているか確認
    If Shift And vbShiftMask Then
        ' Shiftキーが押されている時の処理を記述
        CommandButton1.BackColor = RGB(0, 0, 255)  ' 青のRGB値を設定
    Else
        ' Shiftキーが押されていない時の処理を記述
        CommandButton1.BackColor = RGB(255, 255, 255)  ' デフォルトの背景色(白)に戻す
    End If
End Sub

上記は、Shiftキーが押されている場合には背景色を青に変更し、押されていない場合はデフォルトの背景色を維持する例となります。RGB 関数を使用して色を表現し、Shiftキーが押されている場合には青、押されていない場合には白に背景色を変更しています。これにより、ユーザーがShiftキーを押しながらボタンをクリックしたときに、視覚的な変化が生じるようになります。

プログラミング例

以下に、プログラミング例を紹介します。

Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' Shiftキーが押されているか確認
    If Shift And vbShiftMask Then
        ' Shiftキーが押されている時の処理を記述
        Dim message As String
        message = InputBox("Shiftキーを押しながらクリックしました。メッセージを入力してください.")
        ' メッセージをシート上のA1セルに書き込む
        Sheets("Sheet1").Range("A1").Value = message
    End If
End Sub

この例では、Shiftキーが押されたらメッセージボックスを表示し、ユーザーが入力したメッセージをシート上のA1セルに書き込む処理が追加されています。

まとめ

今回紹介した内容は、Shiftキーを押しながらクリックした時だけ特別な処理を実行する場合等(簡単に実行させたくない場合等)に使用できるテクニックとなります。是非活用してください。