コントロールにアクセスキーを設定する(Acceleratorプロパティ)

ユーザーフォームに設置したコントロールにアクセスキー(アクセラレーターキー)を設定するには Accelerator プロパティを使用します。アクセスキーに指定した文字をキーボードから押すことで、マウスでクリックすることでクリックしたのと同じイベントを発生させることができます。ここでは Excel のユーザーフォームで Accelerator プロパティを使ってコントロールにアクセスキーを設定する方法について解説します。

(Last modified: )

アクセスキーを設定する

ユーザーフォームに設置したコントロールに対してアクセスキーを設定するには Accelerator プロパティを使用します。デフォルトでは Accelerator の値は空文字( "" )となっており設定されていません。

アクセスキーを設定する(1)

コントロールに対するアクセスキーを設定するには Accelerator プロパティの項目をクリックし、設定する文字を直接入力してください。複数の文字を入力しても構いませんが、先頭の文字だけが有効となります。

アクセスキーを設定する(2)

アクセスキーに設定した文字が対象のコントロールに表示されているキャプションの文字列の中のいずれかの文字だった場合、一致した文字に下線が表示されます。

アクセスキーを設定する(3)

対象のコントロールに表示されているキャプションのいずれの文字にも一致しない文字をアクセスキーとして設定することもできますが、利用者がアクセスキーがどの文字なのか分からないのでお勧めはしません。例えば "保存" と表示されているコントロールにアクセスキーとして "c" を設定する場合は "保存(c)" のようにアクセスキーで使用する文字を追加で表示しておくといいかと思います。

このように Accelerator プロパティの値を変更することで、コントロールに対するアクセスキーを設定することができます。

アクセスキーの使い方

アクセスキーを使って対象のコントロールを実行するには Alt キーを押しながらアクセスキーに設定されている文字を押してください。

Alt + アクセスキーに設定した文字

簡単なサンプルを使ってアクセスキーをどのように使うのか試してみます。ユーザーフォームに 2 つのコマンドボタンを設置し、それぞれアクセスキーを設定しています。それぞれのボタンをクリックするとメッセージボックスが表示されるようにコードを記述してあります。

アクセスキーを設定する(4)

現在「Open」ボタンにフォーカスがある状態です。「Close」ボタンのアクセスキーは c なので、このボタンをアクセスキーを使って実行するには Alt + C キーを押してください。すると「Close」ボタンにフォーカスが移動し、「Close」ボタンがクリックされたときと同じ処理が実行されます。

アクセスキーを設定する(5)

このときボタンがクリックされたときのような表示上の変化はありません。

VBAのプログラムの中でAcceleratorプロパティを設定する

プロパティウィンドウを使って Accelerator プロパティの値を変更する代わりに、 VBA のコードを記述して Accelerator プロパティの値を変更することもできます。

プログラムの中で Accelerator プロパティを設定する場合は次の書式を使用します。

オブジェクト.Accelerator [= String ]

対象のオブジェクトの Accelerator プロパティに対してアクセスキーに設定する文字を代入します。

サンプルコード

簡単なサンプルで試してみます。ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャを作成し、その中で Accelerator プロパティの値を設定します。ユーザーフォームが表示される前にコントロールのプロパティの設定が行われます。

Initialize イベントに対するイベントプロシージャの使い方については「ユーザーフォームを表示する直前に発生するイベント(Initializeイベント)」を参照されてください。

ユーザーフォームのコントロールが何もないところをダブルクリックしてください。

VBAのプログラムの中でAcceleratorプロパティを設定する(1)

ユーザーフォームの規定のイベントである Click イベントに対するイベントプロシージャが表示されます。

VBAのプログラムの中でAcceleratorプロパティを設定する(2)

今回はユーザーフォームの Initialize イベントに対するイベントプロシージャ使用するので、コードウィンドウで次のようにイベントプロシージャを追加で記述してください。合わせてそれぞれのボタンがクリックされたときのイベントプロシージャを記述します。

Private Sub UserForm_Initialize()
    CommandButton1.Accelerator = "p"
    CommandButton2.Accelerator = "s"
End Sub

Private Sub CommandButton1_Click()
    MsgBox "Open"
End Sub

Private Sub CommandButton2_Click()
    MsgBox "Close"
End Sub

VBAのプログラムの中でAcceleratorプロパティを設定する(3)

ユーザーフォームに設置した二つのコマンドボタンに対してそれぞれコントロールキーを設定しています。

これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。

VBAのプログラムの中でAcceleratorプロパティを設定する(4)

ユーザーフォームが表示されました。それぞれのコマンドボタンには、アクセスキーに設定した文字と同じ文字に下線が表示されています。

VBAのプログラムの中でAcceleratorプロパティを設定する(5)

それではアクセスキーを使ってコントロールを実行してみます。 Alts キーを押してください。「Close」ボタンが実行されて、メッセージボックスが表示されます。

VBAのプログラムの中でAcceleratorプロパティを設定する(6)

このように VBA のプログラムの中で Accelerator プロパティの値を変更することができました。

-- --

Excel のユーザーフォームで Accelerator プロパティを使ってコントロールにアクセスキーを設定する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。