- ベストアンサー
エクセルで時間管理をしたいのですが
エクセルで時間管理をしたいのですが 社内で労働時間の管理をすることになりました。 A列に名前、B列に社員番号(後で見えないように隠します)、C列に社員番号を入力する空欄があるとします。 C列に社員番号を入力して、B列の番号と一致した場合はD列にその時間を入力するマクロを作りたいのですが、どのようにすれば良いのでしょうか? B列の社員番号を隠すのは他人の番号を入力しないようにするためです。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No1です。 次のようなマクロにしてはどうでしょう。 Private Sub Worksheet_Change(ByVal Target As Range) n = Target.Row m = Target.Column If m <> 3 Then Exit Sub If m = 3 And Cells(n, m - 1).Value = Target.Value Then For i = 1 To 20 If Cells(n, m + i) = "" Then Cells(n, m + i).Value = Time Exit Sub End If Next End If End Sub
その他の回答 (4)
- nicotinism
- ベストアンサー率70% (1019/1452)
月の始まりが一日だとして 一行目に1~月末までの日付を入れときます。 D1 =1,D2=2・・・・・AH1=31 A2から下へ社員名、B2から下へ社員番号、C2以下の該当セルへ社員番号が入力されるものとします。 また、D2のセルでウィンドウ枠の固定を設定してあるものとします。 社員が休暇・欠勤の場合も考慮しなくてはならないので こんな風では。 ※投稿用にTABを全角スペースに変換しています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim delayTime As Date '遅延時間 If Target.Column <> 3 Then Exit Sub End If '入力済みデータを一括削除した場合のエラー対処のため上と分割処理 If Target.Value = "" Then Exit Sub End If delayTime = Now + TimeValue("0:00:02") Application.EnableEvents = False With Target .Select If .Offset(0, -1) = Target.Value Then .Offset(0, Day(Date)) = Time Else .Offset(0, Day(Date)) = "NG" With .Offset(0, Day(Date)).Interior .ColorIndex = 3 .Pattern = xlSolid .PatternColorIndex = xlAutomatic Application.Wait delayTime .ColorIndex = xlNone End With End If End With If Target.Value <> "" Then Target.Value = "" End If Target.Select Application.EnableEvents = True End Sub
お礼
問題は解決しました。 ご丁寧にありがとうございました。
- lll49erlll
- ベストアンサー率58% (25/43)
どうしてもマクロなんでしょうか? 例えば C列にB列とは 違う番号が入力されたら、即 そのセルが赤になるとかじゃ ダメなんでしょうか? そのほうが視覚効果もあるし、マクロで間違ったら 入力値を 即 消すより 間違いの確認が出来て効果的だと思いますが、、、。 それで良かったら、「条件付き書式」で簡単に設定出来ます。 エクセルのバージョンで 操作方法が違いますが、数式を設定する欄に C2から始まるとして、C2から下へ必要分選択して、 =AND(C2<>"",B2<>C2) と入れて、書式で 塗りつぶしを 赤などにすればOKです
お礼
問題は解決しました。 ありがとうございました。
- lll49erlll
- ベストアンサー率58% (25/43)
どうしてもマクロなんでしょうか? 例えば C列にB列とは 違う番号が入力されたら、即 そのセルが赤になるとかじゃ ダメなんでしょうか? そのほうが視覚効果もあるし、マクロで間違ったら 入力値を 即 消すより 間違いの確認が出来て効果的だと思いますが、、、。 それで良かったら、「条件付き書式」で簡単に設定出来ます。 エクセルのバージョンで 操作方法が違いますが、数式を設定する欄に C2から始まるとして、C2から下へ必要分選択して、 =AND(C2<>"",B2<>C2) と入れて、書式で 塗りつぶしを 赤などにすればOKです
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えば次のようなマクロにします。 Private Sub Worksheet_Change(ByVal Target As Range) n = Target.Row m = Target.Column If m = 3 And Cells(n, m - 1).Value = Target.Value Then Cells(n, m + 1).Value = Time ElseIf m = 3 And Cells(n, m - 1).Value <> Target.Value Then Cells(n, m + 1) = "" End If End Sub
補足
上手く出来ました。ありがとうございます。 もう1つお願いがあるのですが、次にC列に社員番号を入力したときに今度はE列、F列と順々に入力時間を表示させるにはどうすれば良いのでしょうか? よろしくお願いします。
お礼
希望通りのものが出来ました。 迅速に答えて頂きありがとうございました。