質問: エクセルの時刻入力を簡単にする方法 マイクロソフトのエクセル excel(2010)において時刻入力を簡単にしたいのですが、下記のようなことをする方法はありますか? ex. タイムカードの集計をするのですが、 セルに「13時25分」を入力したく、表示は「13:25」としたい、日付情報は含まなくてokの場合、 (カギカッコは分かりやすく見えるかなと思った表記であり不要) 私はキーボードのテンキーで1と3を押した後、ひらがなでいうと「け」のところにあるコロン(:)を押して、テンキーで2と5をおします。 が、このコロンをタイピングするのがめんどくさく、普段はかな入力なので「13け25」になってしまったりするので、 できれば予めセルに設定をするなどしておいてテンキーで1と3と2と5だけを押すと13:25になるとベストです。(1つのセルで完結したいので、こっちのセルに入れておくとこっちのセルがっていうのは好みではありません・・・) 8:05だとしたら「0805」、16:35だとしたら「1635」と入力するだけの方法はありませんか?
回答: こんにちは。 本日は、もう私が書こうと思っていたものは、あらかた出てしまったので、マクロだけ提示しておきます。 せっかく、#4さんが書いていただいているのに、後付けで申し訳ないのですが、わたし流の方法です。こんなパターンのマクロは、もう10年前に書いていたような気がします。 私の考え方は、vbaの時間値というものは、24時間以内に対して、 ワークシート上は、時間自体の制限はないというところを、着眼点においたものなのです。 マクロを作っている人だけが、その違いを分かるかもしれません。まずは参考まで。 1290 と入れたら、どうなるか、とか、2645 はどう表示されるか。 シートタブを右クリック-コードの表示 現れた画面に以下を貼り付けます。 それから、書式が先で、値が後なのですね。あまりはっきりした記憶ではないのですが、値を先に入れると、その値が変わってしまうことがあるという現象からなのです。 '// private sub worksheet_change(byval target as range) dim mytime as variant dim myh as variant dim myvalue as variant if intersect(target, range("a1:a30")) is nothing then exit sub '入力する範囲 if target.count > 1 then exit sub '複数のセルの同時処理は行わない if target.value = "" then exit sub '空白は除外 if not isnumeric(target) then exit sub '文字は除外 myvalue = target.value2 if len(myvalue) > 4 then myvalue = left(myvalue, 4) mytime = format(myvalue, "00:00") myh = mid(mytime, 1, 2) if myh >= 24 then mytime = (myh \ 24) + (myh mod 24) / 24 + mid(mytime, 4, 2) / (24 * 60#) end if application.enableevents = false if isdate(mytime) then target.value = mytime else target.numberformat = "[h]:mm" target.value = mytime end if application.enableevents = true end sub '///