• ベストアンサー

エクセルマクロで、現在の時刻を記録するには?

エクセルマクロの初心者です。タイムカードの簡易版(個人記録用)を作っています。B列に月、C列に日付けの値が入っています。4月でいうと、B列1行目から30行目までは4が、C列1行目から30行目までは1から30までの値が入っています。例えば4月1日に出社した時にマクロボタンを押すとD列の1行目に、その時の時刻が入力できるようにしたいのです。時刻の表示形式は特にこだわりません。now,day,monthなどの意味や使い方はだいたい分かりますが、例えば4月10日にマクロボタンを押した時に、D列10行目に時刻が記録されるようにするにはどうすればよいでしょうか。教えてください。

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

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

一部を訂正してください。 Set WS1 = Worksheets("Sheet1") Row1 = WorksheetFunction.Match(Month(Date), WS1.Range("B:B"), 0) For Row = Row1 To WorksheetFunction.CountIf(WS1.Range("B:B"), Month(Date))+Row1-1 If WS1.Cells(Row, 3) = Day(Date) Then WS1.Cells(Row, 4) = Time() Exit Sub End If Next

a12
質問者

お礼

回答ありがとうございました。出来ました。Worksheetfunctionを使って順に月日を探せばよいことが分かりました。

その他の回答 (2)

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

一例です。 D列に入力済みの場合、E列に退勤時刻を表示としています。 If Range("D1").Offset(Day(Date) - 1) = "" Then Range("D1").Offset(Day(Date) - 1) = Format(Time, "h:mm") Else Range("E1").Offset(Day(Date) - 1) = Format(Time, "h:mm") End If

a12
質問者

お礼

入力済みの時にifとoffsetを使って退勤時刻を入力する方法も分かりました。これも使わさせてもらいました。参考になり感謝いたします。

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

例えば次のようにすればよいでしょう。 Set WS1 = Worksheets("Sheet1") Row1 = WorksheetFunction.Match(Month(Date), WS1.Range("B:B"), 0) For Row = Row1 To WorksheetFunction.CountIf(WS1.Range("B:B"), Month(Date)) If WS1.Cells(Row, 3) = Day(Date) Then WS1.Cells(Row, 4) = Time() Exit Sub End If Next