|
■No48105 (VB、初初初所心者 さん) に返信 > VBのまくろでクリックではなくエンターキーで移動したり確定するにはどう記述 > すればよいですか?
Excel VBA の UserForm のことであれば、KeyDown イベントや KeyPress イベントが使えます。
一方、シート上で Enter を押したときに『次に移動すべきセル位置』の制御だとすれば、 ・Excel オプションの[編集]タブ(Excel 2003 以下) ・Office ボタン>Excel オプションの[詳細設定]タブ(Excel 2007) ・VBA で、Application オブジェクトの MoveAfterReturnDirection プロパティを設定する のいずれかで、移動方向を上下左右のいずれかから決定できます(移動しないようにも設定できます)。
> Range("d2").Select > D2のセルをエンターしたときにE300などに移動するマクロを記述するにはどうすればよいでしょうか?
移動先の制限が必要な場合、たとえば、ワークシート上に以下のイベント制御を組み込んでおく事ができます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address(True, True, xlA1) = "$D$2" Then If Application.MoveAfterReturnDirection = False Then Application.MoveAfterReturnDirection = xlDown End If Cells.Locked = True Range("$D$2").Locked = False Range("$E$300").Locked = False EnableSelection = xlUnlockedCells Protect _ DrawingObjects:=False, _ Contents:=True, _ Scenarios:=True, _ AllowFormattingCells:=True, _ AllowFormattingColumns:=True, _ AllowFormattingRows:=True, _ AllowInsertingColumns:=True, _ AllowInsertingRows:=True, _ AllowInsertingHyperlinks:=True, _ AllowDeletingColumns:=True, _ AllowDeletingRows:=True, _ AllowSorting:=True, _ AllowFiltering:=True, _ AllowUsingPivotTables:=True Else EnableSelection = xlNoRestrictions Unprotect End If End Sub
このようにしておくと、D2 セル上で Enter を押したときに E300 に遷移するようになります。
# 上記は、Excel 2007 の場合です。 # 他のバージョンでは、Protect メソッドに指定できる引数が少ないので、適宜書き換えて下さい。
ただしこの手法の場合には、 ・D2 セル上にいる場合には、E300 以外のセルをクリックしても移動できない。 ・D2 セル上で、矢印キーやTabキーを押した場合にも、(Enter を押していないのに)E300に移動する。 という制限が生じます。
あるいは…… API や DirectInput 等でキー入力を調べるという手法もありますが、 > D2のセルをエンターしたときに のように、特定のタイミングに依存するようなケースでは、使いにくいかもしれません。 (こちらの手法は、Excel VBA でゲームを作成をするような場合に使われることがあります)
|