質問: エクセル マクロのキー入力 マクロ初心者です、過去の質問を調べたのですが、vbaでキー入力の処理が解りません。 今は、c列~h列とu列に数字を入力してからvbaを実行していますが、h~uへ移るのに→で移動しています。 毎回面倒なので、最初に入力してu列を入力してからそのまま今のマクロを実行したくなりました、が、vbaでキー入力の処理が解りません。 office2000parsonalなのでマクロでvlookupは使えませんが、行と列の移動は変数を使って出来ますので、そういったことは省いて頂いて結構です。 よろしくお願いします。
回答: キーによるセルカーソルの移動はマクロでは書けません。 その代わり「指定したセルを選ぶ」事により、カーソルを強制移動させる事が出来ます。 「どこを選ぶかの基準」は「今カーソルがある所」を示す「activecell」が基準になります。 1列右であれば「列が+1」なので「offset(0, 1)」を使います。 1行下であれば「行が+1」なので「offset(1, 0)」を使います。 1列左であれば「列が-1」なので「offset(0, -1)」を使います。 1行上であれば「行が-1」なので「offset(-1, 0)」を使います。 従って、以下のようになります →キー:activecell.offset(0, 1).select ←キー:activecell.offset(0, -1).select ↓キー:activecell.offset(1, 0).select ↑キー:activecell.offset(-1, 0).select 移動は1つづつである必要は無いので activecell.offset(10, -5).select と書けば「10行下の、5列左」に一気に飛びます。 これを利用すれば、h列からu列に一気にカーソルを飛ばす事が出来ます。 ワークシートのchangeイベント(値が変化した時に自動的に呼ばれるイベント)に private sub worksheet_change(byval target as range) if target.column = 8 then 'h列か? activecell.offset(0, 13).select '13列右に(u列に)飛べ end if end sub と書いておくと、h列にデータを打ち込んだ瞬間、カーソルがu列に飛びます。 また、上記の応用で「u列のデータが変化したらvbaで何かやる」のも可能なので、u列の入力が終ってから手動でvbaを呼ぶ必要が無くなります。 private sub worksheet_change(byval target as range) if target.column = 8 then 'h列か? activecell.offset(0, 13).select '13列右に(u列に)飛べ elseif target.column = 21 then 'u列か? やりたい事をここに書く end if end sub