2014/11/16

Excel テンキーの一部キーにシートを移動する処理を割当てたい

Excel ファイルの複数シートに対し数値を入力する際、「テンキーからシート移動出来たら楽だなぁ」と思いましたので、テンキーの特定キーを押しExcel シートを前後に移動するVBAを書いてみました。

背景

Excel ファイルの複数シートに対し数値を入力する作業、よくあると思います。
この場合、
テンキー入力→シート移動→テンキー入力→シート移動→・・・
という操作になります。
シート移動は普通マウスを使う(玄人さんの場合、Ctrl+PgUp/Ctrl+PgDnでしょうか)ので、テンキー/マウス間の移動が発生するため、作業効率がよくありません
入力内容が少ない場合は大した事はありませんが、長時間になればなるほど「もっと入力作業に集中したい」という気持ちになるのではないでしょうか。

サンプル

今回のサンプルは、入力操作で絶対使わないキーに対し「シート移動」関数を割り当てます。
使う可能性のあるキーに関数を割り当てると痛い目にあいますので、業務内容を事前によく精査する事をオススメします。
さて、サンプルは
  1. Workbook_Open イベントに「キーとキーを押した時に実行される関数」を登録
  2. 共通モジュール等に「シート移動の関数」を登録
に分かれます。
今回は、テンキーの[+]キー及び[-]キーに関数を割り当てます。
Workbook_Open イベント
Application.OnKey メソッドを利用する事で、キーに何らかの処理を割り当てる事が出来ます。
下記サンプルの{107}、{109}は、テンキーの[-]や[+]を示します。
fncMoveNextSheet、fncMovePreviousSheetは、シートを前後に移動する関数です。
Private Sub Workbook_Open()
    'テンキー[+]の処理
    Application.OnKey "{107}", "fncMoveNextSheet"
    'テンキー[-]の処理
    Application.OnKey "{109}", "fncMovePreviousSheet"
End Sub
シート移動の関数
シート移動は、Worksheet.Next プロパティ、及びWorksheet.Previous プロパティを使います。
最初又は最後尾のシートで移動操作を行うとエラーが発生するため、エラー処理を入れています。
最初のシートでfncMovePreviousSheet 関数を実行すると最後尾のシートに移動、最後尾のシートでfncMoveNextSheet 関数を実行すると最初のシートに移動します。
'テンキーでシートを移動する
Public Sub fncMovePreviousSheet()
    On Error GoTo MOVE_ERR
        ActiveSheet.Previous.Activate
        Exit Sub
MOVE_ERR:
    Worksheets(Worksheets.Count).Activate
End Sub

'テンキーでシートを移動する
Public Sub fncMoveNextSheet()
    On Error GoTo MOVE_ERR
        ActiveSheet.Next.Activate
        Exit Sub
MOVE_ERR:
    Worksheets(1).Activate
End Sub

シート移動後の処理

環境によって異なりますが、シート移動後はすぐに数字を入力できるようにする場合は、開始位置のセルを選択する処理を入れましょう。
参考にしたサイト
スポンサーリンク

スポンサーリンク