• ベストアンサー

エクセルで時間管理をしたいのですが

エクセルで時間管理をしたいのですが 社内で労働時間の管理をすることになりました。 A列に名前、B列に社員番号(後で見えないように隠します)、C列に社員番号を入力する空欄があるとします。 C列に社員番号を入力して、B列の番号と一致した場合はD列にその時間を入力するマクロを作りたいのですが、どのようにすれば良いのでしょうか? B列の社員番号を隠すのは他人の番号を入力しないようにするためです。 よろしくお願いします。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.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

yukirin1988
質問者

お礼

希望通りのものが出来ました。 迅速に答えて頂きありがとうございました。

その他の回答 (4)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

月の始まりが一日だとして 一行目に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

yukirin1988
質問者

お礼

問題は解決しました。 ご丁寧にありがとうございました。

回答No.3

どうしてもマクロなんでしょうか?  例えば C列にB列とは 違う番号が入力されたら、即 そのセルが赤になるとかじゃ  ダメなんでしょうか? そのほうが視覚効果もあるし、マクロで間違ったら 入力値を  即 消すより 間違いの確認が出来て効果的だと思いますが、、、。 それで良かったら、「条件付き書式」で簡単に設定出来ます。 エクセルのバージョンで 操作方法が違いますが、数式を設定する欄に   C2から始まるとして、C2から下へ必要分選択して、   =AND(C2<>"",B2<>C2) と入れて、書式で 塗りつぶしを 赤などにすればOKです

yukirin1988
質問者

お礼

問題は解決しました。 ありがとうございました。

回答No.2

どうしてもマクロなんでしょうか?  例えば C列にB列とは 違う番号が入力されたら、即 そのセルが赤になるとかじゃ  ダメなんでしょうか? そのほうが視覚効果もあるし、マクロで間違ったら 入力値を  即 消すより 間違いの確認が出来て効果的だと思いますが、、、。 それで良かったら、「条件付き書式」で簡単に設定出来ます。 エクセルのバージョンで 操作方法が違いますが、数式を設定する欄に   C2から始まるとして、C2から下へ必要分選択して、   =AND(C2<>"",B2<>C2) と入れて、書式で 塗りつぶしを 赤などにすればOKです

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

例えば次のようなマクロにします。 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

yukirin1988
質問者

補足

上手く出来ました。ありがとうございます。 もう1つお願いがあるのですが、次にC列に社員番号を入力したときに今度はE列、F列と順々に入力時間を表示させるにはどうすれば良いのでしょうか? よろしくお願いします。

関連するQ&A

専門家に質問してみよう