こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2007VBAセルの値とFormat関数

●質問の主旨

下記コード4行目と添付画像より
Range("B30").ValueとFormat(Day(Date), "d")の戻り値は
等しいように思います。
ですが、E列を右クリックしたときに現在の時間を
入力できません。なぜでしょうか?ご存知の方ご教示願います。

●質問の補足
エクセルでタイムカードを作成しています。
出勤・退勤打刻の列を右クリックすれば
現在の時刻が表記できるようにしたいと考えております。

下記のコードでは2月13日の出勤打刻(E30セル)しか
できないことになりますが、徐々にコードを加筆していくつもりです。

●コード
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 5 Then '出勤打刻の位置
Cancel = True 'コンテキストメニューの抑制
If Range("B30").Value = Format(Day(Date), "d") Then '本日の日付とB30セルの日付が合致すれば
Range("E30").Value = Format(Time, "hh:mm") '出勤打刻の代入値を"hh:mm"でE30に表記する
Else
MsgBox "打刻位置が間違っています", vbExclamation, "打刻位置の確認" 'メッセージ表示
Cancel = True 'コンテキストメニューの抑制
End If
End If
End Sub

投稿日時 - 2012-02-13 09:13:46

QNo.7302210

困ってます

質問者が選んだベストアンサー

次のようなコードにすればよいでしょう。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 5 Then '出勤打刻の位置
Cancel = True 'コンテキストメニューの抑制
If Cells(Target.Row, 2).Value = Day(Date) Then
Target = Time
Target.NumberFormat = "hh:mm"
Else
MsgBox "打刻位置が間違っています", vbExclamation, "打刻位置の確認" 'メッセージ表示
Cancel = True 'コンテキストメニューの抑制
End If
End If
End Sub

投稿日時 - 2012-02-13 10:30:47

補足

KURUMITO様
たびたびの質問恐れ入ります。
KURUMITO様がご教示いただいた

If Cells(Target.Row, 2).Value = Day(Date) Then

のコードによると本日(2012年2月13日)でなくとも、
クリックした日とB列の日付は常に照合されることに
なると考えて差支えないのでしょうか?

投稿日時 - 2012-02-13 12:00:15

お礼

KURUMITO様
ご回答ありがとうございます。
補足の方も閲覧くだされば幸いです。

投稿日時 - 2012-02-13 12:01:06

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

NO1です。(追記)
VBAの日付範囲は、西暦100年1月1日~西暦9999年12月31で
0を1899/12/30で変換されるので数値を指定すると-1少ない日付に
なり、本日が13日とするとFormat(Day(Date),"d")では12となるので
IF文ではFalseになります。

投稿日時 - 2012-02-13 10:58:37

お礼

mu2011様
いつもご丁寧なご回答ありがとうございます。
上記のアドバイスもプログラミングの参考にさせていただきます。

投稿日時 - 2012-02-13 12:05:19

ANo.1

Format(Day(Date), "d") は既に日をさらに書式変換しているので
以下のコードで如何でしょうか。
 If Range("B30").Value = Day(Date) Then

又、次の様にしたらE列を右クリックした行を選択できます。
If Target.Offset(0, -3).Value = Day(Date) Then
Target.Value = Format(Time, "hh:mm")

投稿日時 - 2012-02-13 09:58:03

お礼

mu2011様
いつもご丁寧なご回答ありがとうございます。
お礼が遅くなり恐縮です。

投稿日時 - 2012-02-14 07:52:20

あなたにオススメの質問