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

エクセル2010を使っています。

現在時刻を記録することが多いです。
そのまま簡単に自動入力する方法はCTRL+;を使えばいいことが分かりました。
しかし、私の場合は5分単位のキリのいい数字で自動入力したいです。

例) 5時31分→5時30分(切り下げ) 12時33分→12時35分(切り上げ)

これを簡単に行うにはどうしたらいいでしょうか?
ご教示お願いします。

A 回答 (3件)

こんにちは。



> 現在時刻を記録することが多いです。
> そのまま簡単に自動入力する方法はCTRL+;を使えばいいことが分かりました。

【CTRL+;】は【CTRL+:】の書き間違いですよね。

> しかし、私の場合は5分単位のキリのいい数字で自動入力したいです。
>
> これを簡単に行うにはどうしたらいいでしょうか?

マクロ(VBA)で対応することになります。他に方法はありません。
マクロと聞くと敷居が高く感じるかも知れませんが、
今回紹介するのはビギナー向きの内容です。

> 例) 5時31分→5時30分(切り下げ) 12時33分→12時35分(切り上げ)

"分"を整数値として扱い、"二捨三入?"して、5分単位で丸める、
ということなのでしょう。(※以下"5分丸め"と略記します。)

時刻には"秒"も含まれますから、
  9:30:59 → 9:30 (秒のみ切り下げ)
  9:31   → 9:30 (切り下げ)
  9:32:29 → 9:30 (切り下げ)
  9:32:30 → 9:35 (切り上げ)
  9:33   → 9:35 (切り上げ)
  9:34   → 9:35 (切り上げ)
  9:35:59   → 9:35 (秒のみ切り下げ)
  9:36   → 9:35 (切り下げ)
  9:37:29 → 9:35 (切り下げ)
  9:37:30 → 9:40 (切り上げ)
  9:38   → 9:40 (切り上げ)
  9:39   → 9:40 (切り上げ)
という風にするのが妥当と思います。


■マクロの動作仕様に関する説明
"分"を5分単位で丸める規則は上に挙げた例の通りです。

マクロは、この機能を使いたいブックに記述します。

内容的には、
 "5分丸め"処理をするのはマクロ【現在時刻5分丸め】です。
 ブックを開いた時(_Open)、ショートカットキー CTRL+: にマクロ【現在時刻5分丸め】を登録します。
 ブックを閉じる前に(_BeforeClose)、ショートカットキー CTRL+: を元に戻します。
という3つのマクロで構成されます。

マクロを登録したブックを開けば、自動的に機能を開始します。
マクロを登録したブックが開いている間であれば、他のブックに対しても機能します。
マクロを登録したブックを閉じれば、CTRL+: は通常の現在時刻に戻ります。

この"5分丸め"機能は、通常の CTRL+: 操作で得られる現在時刻と、以下のように使い分けます。
  "5分丸め"時刻を設定する場合 : セルを選択して、 CTRL+:
  通常の現在時刻を設定する場合 : セルをダブルクリック、または選択後に数式バーをクリックして、 CTRL+:
セルを編集モードや入力モードで開いている間は、マクロは機能しません。
セルを

■マクロを使えるようにする手順の説明
0)"マクロを登録するブック"を開いておく(試す時は新規のブックを開いておきます)
   Alt+F11 を押す ↓
1)Visual Basic Editor(マクロ編集画面)が開く
   画面左、"プロジェクト - VBAProject"と書かれたエクスプローラに、
   "マクロを登録するブック"の名前 が表示されているのを確認したら、
   "マクロを登録するブック"の名前 の左にある +ボタンにて 下階層を開いて ↓
3)"マクロを登録するブック"配下の
   "ThisWorkbook"と書かれた行をダブルクリック ↓
4)右側に表示された 真っ白なシートが今回登録するマクロを書き込む"ThisWorkbookモジュール"です。
   以下の記述を"ThisWorkbookモジュール"に貼付けます。

' ' ********** この行から **********

Private Sub Workbook_Open()
  Application.OnKey "^:", "ThisWorkbook.現在時刻5分丸め"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.OnKey "^:"
End Sub

Private Sub 現在時刻5分丸め()   '  Re8530567
  ActiveCell.Value = Format(Round(Time * 288) / 288, "h:mm")
End Sub

' ' ********** この行まで **********

   再びAlt+F11 を押して ↓
5)Excel画面に戻ります。
   名前を付けて保存します。 ↓
   (Excel2007以降であれば、ファイルの種類を、マクロ有効ブック.xlsm、にします) ↓
6)以上で準備完了です
   一旦、"マクロを登録したブック"を閉じます。

以後、ブックを開けば"5分丸め"機能が有効になります。

///
以上、何か疑問などありましたら、補足欄にでも書いてみて下さい。
    • good
    • 0
この回答へのお礼

大変丁寧な解説をいただき、ありがとうございました。マクロ初心者の私にも、ご説明の通りにやってみたら動かせました。

マクロがファイルに組み込んだ形になるので、いちいち考えないでもCTRL+:すれば(ご指摘の通り、;と間違えて書いてしまいました)自動的に「二捨三入」してくれて、格段に効率が上がりました!

お礼日時:2014/04/01 16:17

アクティブセルに時刻表示で、3分未満又は4分以上8分未満の場合は5分単位で切り捨てFLOOR関数使用。


それ以外はCeiling関数で5分単位で切上げ。

マクロで行うしかないと思います、スマートな構文ではありませんが、マクロの一例です。

入力したいセルを選択後下記マクロ実施。

Sub test()

Dim ThisTime, MyTime As Date
Dim x As Integer

ThisTime = Time
x = Right(Minute(ThisTime), 1)

If x < 3 Or (x > 4 And x < 8) Then
MyTime = Application.WorksheetFunction.Floor(ThisTime, 1 / (60 * 24 / 5))
Else
MyTime = Application.WorksheetFunction.Ceiling(ThisTime, 1 / (60 * 24 / 5))
End If

ActiveCell = Format(MyTime, "h:mm")

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。マクロを使うのは初めてなんですが、セルを入力した後に一回ずつマクロを動かすということでしょうか?

お礼日時:2014/04/01 16:13

>例) 5時31分→5時30分(切り下げ) 12時33分→12時35分(切り上げ)


>これを簡単に行うにはどうしたらいいでしょうか?
再計算のときに現在時刻を表示するにはNOW()を使えますので、これを応用すれば可能と思われます。

=(HOUR(NOW())&":"&ROUND(MINUTE(NOW())/5,0)*5)*1
手動で再計算するときはF9キーを打鍵します。

単発でCtrl+:を使う必要がある場合は特定のセル(例えばA1)へ背景色と文字色を同じにして現在時刻を設定し、目的のセルへ上記式のNOW()の代わりにA1とすれば良いでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。手軽でよさそうですが、NOWのところをそれぞれの時刻に変えてやらないと、他のセルまで今の時刻でそろえて記入されてしまうようです。別途計算式を入れるセルが必要ということですよね? たとえばA1に時刻が入っていれば、B1に計算式を入れてやって再計算というように。

お礼日時:2014/04/01 16:11

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