• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2007VBAセルの値とFormat関数)

Excel2007VBAセルの値とFormat関数

このQ&Aのポイント
  • Excel2007VBAセルの値とFormat関数について質問します。
  • Excelのタイムカードを作成している際に、出勤・退勤打刻の列を右クリックすると現在の時刻を表記したいと考えています。
  • コードの該当箇所で条件分岐を行っており、本日の日付と指定のセルの日付が一致する場合に出勤打刻の代入値を指定フォーマットでセルに表記します。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のようなコードにすればよいでしょう。 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

dradra33
質問者

お礼

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

dradra33
質問者

補足

KURUMITO様 たびたびの質問恐れ入ります。 KURUMITO様がご教示いただいた If Cells(Target.Row, 2).Value = Day(Date) Then のコードによると本日(2012年2月13日)でなくとも、 クリックした日とB列の日付は常に照合されることに なると考えて差支えないのでしょうか?

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

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

dradra33
質問者

お礼

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

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.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")

dradra33
質問者

お礼

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

関連するQ&A