コロンの入力が面倒
時刻を入力するときに「12:34」のようにコロンを入力する必要があります。ただ、コロンはキーボードの配置で入力しやすい場所にあるとは言えません。事務関係でExcelに時刻を入力している場合はコロンの入力量も多くなりがちで、なかなか面倒です。
入力が面倒なら、もうコロンキーには触らない方法を検討しましょう。コロンキーに触らずにコロンを入力できるのか?→できます。
ここではVBAの方法をメインに紹介しますが、多くの場合はExcelの機能を使うことでコロンを入力しなくてよくなる方法がありますので、まずそちらも紹介します。
Excelの機能を使ってコロンを入力しない方法
テンキーを使っている場合であれば、テンキーにコロンキーがあれば入力しやすいですよね。実はExcelの機能のオートコレクト機能を使えばコロンキーがテンキーにあるようにすることが可能です。
オートコレクト機能とは「こんにちわ」を「こんにちは」のように誤った入力を修正してくれる機能です。日本語だけでなく英文でも「didnt」と書くと「didn’t」と補正してくれたりします。この「こんにちわ」を「こんにちは」に変換できるのはExcelインストール時に変換前後の用語として最初から登録されているためです。そして用語はあとから追加することが可能です。
テンキーには数字の他に「/ * – + .」の5つのキーがありますがこれらは時刻入力には使いませんので、この中でも入力しやすい小数点キーをオートコレクト機能でコロンとして登録します。登録手順は以下の通りです。
- 「ファイル」メニュー→「オプション」でExcelのオプションを開きます。
- 「文章校正」→「オートコレクトのオプション」→「オートコレクト」タブを開きます。
- 「入力中に自動修正する」にチェックを付けます。
- 修正文字列にテンキーの小数点を2個「..」入力し、修正後の文字列にコロン「:」を入力して、追加ボタンを押します。追加後に一覧に選択状態で..と:の行が追加表示されます。あとはOK、OK、とボタンを押してオートコレクトダイアログとExcelオプションダイアログを閉じます。
これで小数点を2回入力するとコロンになります。試しに新規の空白ブック(Ctrl + Nキー)を開き、小数点キーを2回入力します。コロンに変換されることが分かると思います。どのセルでもいいので”15..30″と入力すると、3を入力した時点で..が:に変換され、”15:30″として入力されます。
入力はテンキーの小数点キーではなく、キーボードの「る > 。 .」のキーでも同様に動作します。
VBAを使わなくてもほとんどの場合はこれで解決します。ただ、この方法は「入力中に自動修正する」のチェックをOFFにしていると使えません。オートコレクト機能がわずらわしいという理由でオートコレクト機能の全部のチェックを外している場合もあるとは思いますが、上の画像のように「入力中に自動修正する」のチェックだけをONにしてもこの方法は使えます。
VBAでコロンを入力しない方法
次にVBAを使ってコロンキーを押さずにコロンを表示する方法です。
時刻入力が必要になる筆頭が勤務表です。ある月の1日から31日までの行があり、開始時刻と終了時刻の列があって、という形式が多いと思います。
ここでは開始時刻と終了時刻の入力欄にコロンキーを入力せずに時刻として「12:34」のように変換する方法を紹介します。
単純ですが以下の絵のようにA列が日付、B列が開始時刻、C列が終了時刻、というフォーマットとします。開始時刻と終了時刻の列はあらかじめ「[h]:mm」の書式を設定しています。しなくても多分いいです。ちなみに[h]は24時以降でも32:00のように表記できる書式です。
次にそのブックをマクロ有効ブック形式(拡張子が.xlsm)で保存します。
コード
以下のコードは勤務表のシートモジュールに書きます。「Sheet2」というシートに勤務表を書いてあるのでしたら、VBAでは以下のように「Sheet2(Sheet2)」を開いて、そこにコードを書きます。
やっているのはセルの内容が変わったときのChangeイベントで、「123」のように3文字入力されたら”1:23″、「1234」と4文字入力されたら”12:34″とコロンを付けて変換する処理を入れてます。開始時刻と終了時刻列以外の場合の入力や、数字以外が入力された場合は時刻とはみなさず処理をしないようにしています。
ここでは事項の列がB列とC列のため、12行目で2行目と3行目の場合は処理しないようにしていますが、例えばD列とE列であれば4と5とかに書き換えてください。
Changeイベントの詳細については「VBAでセルの値が変更時に処理を行う(Worksheet_Change)」をご参照ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Option Explicit Private Sub Worksheet_Change(ByVal r As Range) On Error Resume Next '// 消したときは以降を処理しない If r.Text = "" Then Exit Sub End If '// 時刻以外が入力された場合は以降を処理しない If r.Column <> 2 And r.Column <> 3 Then Exit Sub End If '// 数値以外が入力された場合は以降を処理しない If IsNumeric(r.Value) = False Then Exit Sub End If Dim iLength As Integer '// 文字列長 '// 入力文字列長を取得 iLength = Len(r.Value) '// 3文字入力時 If iLength = 3 Then '// 1:23形式に変換 r.Value = Left(r.Value, 1) & ":" & Right(r.Value, 2) '// 4文字入力時 ElseIf iLength = 4 Then '// 12:34形式に変換 r.Value = Left(r.Value, 2) & ":" & Right(r.Value, 2) End If End Sub |
実行
3文字を入力してEnterを押す(または別のセルを選択する)と以下のようになります。
入力して、
Enterで変換。
また、4文字を入力してEnterを押した場合は以下のようになります。
入力して、
Enterで変換。