プロが教えるわが家の防犯対策術!

マイクロソフトのエクセル 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」と入力するだけの方法はありませんか?

A 回答 (7件)

解決されてましたらスルーしてください



A2:B32 の範囲でのものになりますが、以下のような感じではどうでしょう

805
234
45
567
1278
2367



8:05
2:34
0:45
6:07
13:18
24:07

となるかと
なお、まとめてはりつけても動くようにしてみました
また、変換後のものを移動/貼り付けしても、誤動作はしないかと
不具合あったら、修正するなり捨てるなりしてください


Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range, r As Range
  Dim vA As Variant, v As Variant
  Dim iT() As Long
  Dim i As Long, j As Long

  Set rng = Intersect(Target, Range("A2:B32"))
  If (rng Is Nothing) Then Exit Sub

  vA = Array(Array(60, 1), Array(24, 0))

  Application.ScreenUpdating = False
  Application.EnableEvents = False
  For Each r In rng
    If (r.Value <> "") Then
      i = Val(r.Value)
      If (i = r.Value) Then
        ReDim iT(2)
        For Each v In vA
          j = i Mod 100
          i = i \ 100
          i = i + (j \ v(0))
          iT(v(1)) = j Mod v(0)
        Next
        r = i + TimeSerial(iT(0), iT(1), iT(2))
      End If
    End If
  Next
  rng.NumberFormatLocal = "[h]:mm"
  Application.EnableEvents = True
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

こんにちは。



本日は、もう私が書こうと思っていたものは、あらかた出てしまったので、マクロだけ提示しておきます。

せっかく、#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
'///
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
VBAはまだまだ勉強不足ですが、着眼点からいろいろなやり方があるものだなと勉強になりました。
改めて挑戦してみたいと思います。

お礼日時:2015/08/21 08:23

>8:05だとしたら「0805」、16:35だとしたら「1635」と入力するだけの方法はありませんか?


少し手間が掛かるが
入力したいセル(または列、行)の書式を「文字列」にしておき、
8:05を8.05、16:35を16.35と入力する。
後に「置換」で入力した範囲のピリオド(小数点のこと)をコロン(:)に置き換える。
これなら時間として計算も可能だ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
ご教示頂いた方法だと、なんとなく計算ミスが起こりそうなので(個人的な感想です)
今回はVBAに挑戦してみたいと思います。

お礼日時:2015/08/21 08:35

こんにちは!



>タイムカードの集計をするのですが
というコトですので、そのまま計算できるように実データにしてみてはどうでしょうか?

VBAになりますが一例です。
入力範囲がこちらでは判断できませんので、A列限定にしています。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)A列セルにデータを入力してみてください。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から//
'▼A列以外、複数セルの場合は何もしない。
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Value <> "" Then
If .Value > 0 And .Value < 2400 Then
If .Value Mod 100 < 60 Then
.NumberFormatLocal = "h:mm"
Application.EnableEvents = False
.Value = TimeSerial(Int(.Value / 100), .Value Mod 100, 0)
Application.EnableEvents = True
Else
MsgBox "下二桁は60未満にしてください。"
.Select
End If
Else
MsgBox "入力値が不正です。"
.Select
End If
End If
End With
End Sub 'この行まで//


※ 本来であれば細かいエラー処理が必要なのでしょうが、
とりあえずはこの程度で・・・m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
希望に一番近い感じで、ご教示頂いた内容を基にいじってみたいと思います。
VBAは齧ろうとしたくらいで挫折しましたがこれから勉強してみようと思いました。
ありがとうございました。

お礼日時:2015/08/21 08:21

> 8:05だとしたら「0805」、16:35だとしたら「1635」と入力するだけの方法はありませんか?



時刻を入力するセル範囲に、「セルの書式設定」の「表示形式」で「ユーザー定義」を「#0":"00」に設定すれば、ご希望のように表示されます。
(8:05の場合、「805」「0805」どちらでもOKです。)

但し、時間の計算には使えませんので、お勧めしません
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
今回の目的は勤務時間を計算するためなので文字にするやり方では対応できません・・
一旦こっちのセルで入力して・・っていうのも考えましたが、
今回はVBAに挑戦してみたいと思います。

お礼日時:2015/08/21 08:33

● 入力規則はNo.1の方の通り、日本語入力を無効にします



● コロンは、オートコレクトを使うと便利だと思います。
当方は 「..」を「:」に自動変換するようにしてあります
13..25 と入力します
http://www4.synapse.ne.jp/yone/excel2010/faq/aut …

▲ 計算するでしょうからすすめませんが、表示形式で見かけ上なら
>8:05だとしたら「0805」、16:35だとしたら「1635」と入力するだけの方法はありませんか?
も可能です。表示形式のユーザー定義で #0!:00
計算するときは、=text(A1,"#0!:00")+0
とするなど、一工夫必要なので参考程度に
「エクセルの時刻入力を簡単にする方法」の回答画像2
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
オートコレクトのやり方は以前ググった時に試してみましたが、いまいち使い勝手が宜しくなく結局左手でコロンを打っていました。
コロンのついたテンキーが売ってないかも探しましたが発見に至りませんw
今回はVBAに挑戦してみたいと思います。

お礼日時:2015/08/21 08:29

>テンキーで1と3と2と5だけを押すと13:25になるとベスト


コッチの方が簡単な気がします

例えばA1のセルを選択した状態で
・データ→データの入力規則
・「データの入力規則」というダイアログで「日本語入力」タブを選択。
・「日本語入力」という項目で「無効」を選択
とやっておくと、かな入力で「13け25」が「13:25」となる筈です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

「け」or「:」のキーを押す事自体が離れていて面倒なので、テンキーの数字キーのみで出来ないかなぁと模索しています。
1、3、2、5、エンターキー、の5つのみで次のセルへというような方法を・・・

お礼日時:2015/08/20 12:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!