• 締切済み

エクセルVBAで作業進捗表を作成したいと考えてます。

エクセルVBAで作業進捗表を作成したいと考えてます。 C3の作業NO欄に任意の作業NO(桁数指定無)を入力するとA3にその時刻(開始時間)が自動入力されD3の状態欄に状態(プルダウンで終了が選択できる)を入力するとB3にその時刻(終了時間)が自動入力される。 この作業開始時間と終了時間の自動入力を3行目から100行目までを対象とするプログラムをりたいのですが、分かりません。 参考までに時間の表示形式は"h:mm"です。 またPCの使用環境はOSはXPでエクセル2003使用です。 ご存知の方がいましたらよろしくお願いします。

みんなの回答

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

シートモジュールのWorksheet_Changeイベントを利用しましょう。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Me.Columns(3)) Is Nothing Then If Target.Value <> "" Then Target.Offset(, -2).Value = Time() Else Target.Offset(, -2).ClearContents End If ElseIf Not Intersect(Target, Me.Columns(4)) Is Nothing Then If Target.Value = "終了" Then Target.Offset(, -2).Value = Time() Else Target.Offset(, -2).ClearContents End If End If End Sub 「ワークシートモジュール」や「Worksheet_Changeイベント」の意味や使い方が解らなかったら、ネットで調べてください。

pink-amigo
質問者

お礼

迅速なご回答ありがとうございます。 VBAの知識はありませんので、モジュールやイベントの意味を調べつつ試してみます。 取り急ぎお礼申し上げます。

  • durarara
  • ベストアンサー率47% (21/44)
回答No.1

細かいことを気にしないのならVBAを使わず、 関数だけでいいのではないでしょうか。 Aの列には =IF(ISBLANK(C3),"",NOW()) のような式と、あとは時間の書式。 Bの列は同様に =IF(ISBLANK(D3),"",NOW()) のような式と、時間の書式。 Dの列は入力規則のリストを使えばいいでしょう。 あとはこれを100行目までコピペするだけ。 たとえば、A3のセルを選択した状態で、 その枠の端を持って100行目までひっぱればOKです。 もしくはA3をコピーしたままの状態で、 Shiftを押しながらA100をクリックしてペースト。 このあたりは大丈夫でしょうか。 もちろんVBAを使ってマクロを書けばもっと細かい制御ができます。

pink-amigo
質問者

お礼

迅速なご回答ありがとうございます。 まさか関数で出来るとは思っていませんでした! 現在の表ではこの関数で十分ですが、今後関連した項目数の追加や細かい制御が必要になる時の事を考えVBAでのプログラミングを知りたいと思ってました。 しかし当面はこの関数で対応させて頂きます。

関連するQ&A