プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (3件)

一部を訂正してください。



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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/09 21:49

一例です。


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/04/09 21:52

例えば次のようにすればよいでしょう。



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
    • good
    • 0

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