リアルタイムキースキャン

以下の宣言を書くとVBA中でGetAsyncKeyState(キーコード)という関数が使えるようになる。

Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long

残念ながらエクセルとエクセルマクロ(VBA)の基本機能だけでは、どのボタンが押されているかを調べる機能はありません。
キーボードのどのボタンが押されているかを調べるときは、User32.dllというライブラリの中にあるGetAsyncKeyStateという関数を使って調べます。
DeclareはDLLの中にある関数を呼び出すときに付ける物で、Functionは関数の宣言。次が関数名GetAsyncKeyStateとLibが関数の居場所で、この関数のときはUser32.dllを指定します。なお、この関数の戻り値はLong型です。
GetAsyncKeyStateは、引数へ目的のキーの番号を設定し呼び出し、戻り値からキーの状態を調べます。引数で指定した番号のキーが押されている間は0以外、押されていないときは0が関数の戻り値に返ってきます。もちろん、一度に複数のキーを押しても、それぞれを判断できます。

http://www.happy2-island.com/excelsmile/smile04/capter00301.shtml

VBAはこういう機能があってうらやましい。
VBSでも出来ないかなと思ったら、DynaCallというものをインストールする必要があるようだ。