2012/04/28

Excel エンターキーだけでセルを右・下に移動させるマクロ

imageExcelを使った帳票作成を行なっていますが、入力はテンキーだけを使うのでセルの移動はエンターキーで行いたいとの要望がきました。
マクロを組めば即できるので大した内容ではありませんが、ソースを交えてメモ。

要望の内容

image
事務系でよくある要望内容ですが、一応まとめておきます。
  • 数値入力はテンキー部だけで行いたい
  • セルの移動は右方向へ。
    ただし、指定する列にきたら次の行の先頭へ移動する
  • すべての入力が終わったらフォームボタンにフォーカスをあわせる
  • 詳細オプションの「Enterキーを押した後にセルを移動する」方向はデフォルト(下)のままにしたい

エンターキーの移動はApplicatoin.MoveAfterReturnを使います!

エンターキーの制御を行う場合、Application.MoveAfterReturnをTrueにすることで今回の要望を実現しています。

MoveAfterReturn プロパティ

MoveAfterReturnDirection プロパティ

VBAのソース

   1: Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
   2:  
   3:     xrArea01 = "B5"     '右方向へ行くRange範囲1
   4:     xrArea02 = "G28"    '右方向へ行くRange範囲2
   5:     xbArea01 = "H5"     '下方向へ行くRange範囲1
   6:     xbArea02 = "H28"    '下方向へ行くRange範囲2
   7:     retCell = "B"       '一段下に戻るセル'通常は下移動
   8:     
   9:     Application.MoveAfterReturn = True
  10:     Application.MoveAfterReturnDirection = xlDown
  11:     
  12:     'xx:xxの範囲ではエンターキーを押して右移動
  13:     If Not Application.Intersect(ActiveCell, Range(xrArea01 & ":" & xrArea02)) Is Nothing Then
  14:         Application.MoveAfterReturnDirection = xlToRight
  15:     End If
  16:     
  17:     'xx:xxは一段下のB列に移動
  18:     If Not Application.Intersect(ActiveCell, Range(xbArea01 & ":" & xbArea02)) Is Nothing Then
  19:         yy = ActiveCell.Row
  20:         Range(retCell & (yy + 1)).Select
  21:     End If
  22:  
  23: End Sub

ブックを閉じるときに注意が必要(みたい)


image
私の環境だけかもしれませんが、マクロを組んだワークブックを閉じる→他ワークブックを開くとセル移動の設定が「下」ではなく「右」になっていました。
対処法として、ワークブックを閉じる時に実行するマクロ(Workbook_BeforeClose関数)を使いました。
同じ現象になった方は下記マクロを使ってみてくださいね。



   1: Private Sub Workbook_BeforeClose(Cancel As Boolean)
   2:     Application.MoveAfterReturn = True
   3:     Application.MoveAfterReturnDirection = xlDown
   4: End Sub
スポンサーリンク

スポンサーリンク