Excel:キー入力を検出するVBA|APIのGetAsyncKeyStateを使用

矢印キー入力があればセル位置を移動するVBAを掲載しています。



Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ


ゲームアプリを作成する場合、よく矢印キー入力を調べます。

矢印キーでUFOが上下左右に動くなどです。

これを実行するのに、Windows APIのGetAsyncKeyStateをExcel VBAでよく使用します。

GetAsyncKeyStateの構文

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

vKey : 押されているかどうか調べるキーを指定します。

戻り値 : 引数で指定したキーが押されれば0以外が、押されていない場合は0が返ります。

早速作ってみます。

例えば、GetAsyncKeyState(27)の場合ESCキーが押されれば0以外が返ります。

関連する「押されたキーを判定する」も参照してください。



キー入力を検出するVBA

実行コードの解説

Windows APIのGetAsyncKeyStateを宣言します。

MyKeyinプロシージャ:引数は行番号を格納するlrowと、列番号を格納するlcolです。

  1. ESCキーが押されるまでDoでループします。
  2. 上矢印キーが押されれば行位置を-1します。
  3. 下矢印キーが押されれば行位置を+1します。
  4. 左矢印キーが押されれば列位置を-1します。
  5. 右矢印キーが押されれば列位置を+1します。
  6. Cells().Selectでセル位置に移動します。

コマンドボタンクリックイベント

行位置と列位置を10にし、MyKeyinプロシージャを呼び出します。


実行コード

矢印キーでセルのカーソル位置が移動します。

高速で移動しますので注意してください。

Option Explicit

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

Private Sub MyKeyin(lrow As Long, lcol As Long)
    Do Until GetAsyncKeyState(27) <> 0
    
        If GetAsyncKeyState(vbKeyUp) <> 0 Then
            lrow = lrow - 1
            If lrow < 1 Then lrow = 1
        ElseIf GetAsyncKeyState(vbKeyDown) <> 0 Then
            lrow = lrow + 1
        ElseIf GetAsyncKeyState(vbKeyLeft) <> 0 Then
            lcol = lcol - 1
            If lcol < 1 Then lcol = 1
        ElseIf GetAsyncKeyState(vbKeyRight) <> 0 Then
            lcol = lcol + 1
        End If
        Cells(lrow, lcol).Select
        DoEvents
    Loop
End Sub

Private Sub CommandButton1_Click()
    MyKeyin 10, 10
End Sub




Homeに戻る > Excel 数値・文字列・検索・印刷のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved