『入力規制とセルの色付け』(マダム) あるパートさんの出勤をエクセルで管理するとします。 朝からの出勤と昼からの出勤、夕方からの出勤の3パターンが あります。 それぞれ働く時間がまちまちだとして、    列に日付、行は1行目に朝からの勤務時間、2行目に昼からの勤務時間、 3行目に夕からの勤務時間、そして4行目に仕事内容を入力したいと考えております。 A B C D E F G H 1 1日 2日 3日 4日 5日 6日 7日 8日 2 朝 5 6 × × × × × × 3 昼 × × 3 2 × × × 4 4 夕 × × × × 5 × × × 5内容 A C D A E × × B 6 1日は朝から5時間Aに従事、2日は朝から6時間Cに従事、 3日は昼から3時間Dに従事・・・、6日7日は休み という風に入力をしたいと考えています。 当然朝から働いた日は昼と夕のセルには数字は入りませんし、 同じように、昼から働いた日は朝と夕のセルには数字は入りません。 そして出勤した日には必ず「内容」セルに何か文字が入ります。 パートさんは急に休んだりしますし、朝、昼、夕いつ来て何時間 働くのか前もって分かっていないものとして、×のところに 間違って、入力できないように入力規制をかけ、さらに セル自体をグレーに色づけたいと考えております。 具体的には1日の就業後に「朝」セルに5と入力した時点で、 1日の「昼」セルと「夕」セルに自動的に入力規制が掛かり、 さらにグレーに色づけされる。 さらに上記例でいくと、6日7日は休んでいますので、次に来た日 (8日)の列に文字を入力すると、6日と7日の列に入力規制および色づけ・・ という風にしたいのです。 条件つき書式では色づけはできても、入力規制が掛けられないし、 休みの日の入力規制や色づけはどうしたものかと考えているのですが、 私の知識では足りないので、どうか私に良い知恵を拝借して頂け ませんでしょうか? できれば、関数や条件つき書式を組み合わせたものが理想です。 Excel2003 ---- 関数だけでと考え、私だったら入力者用と管理者(マダムさん)のシートを 分けて作成してみようと思い立ちました。 「入力用」シート A   B C D E F G H   I 1   1日 2日 3日 4日 5日 6日 7日 8日 2 時間帯  入力規則で「朝,昼,夕,休暇」とリスト設定する 3 勤務時間 数字入力させる 4 内容   入力規則で「A,B,C,D」とリスト設定する 「管理用」シート A   B C D E F G H   I 1   1日 2日 3日 4日 5日 6日 7日 8日 2 朝   B2=IF(入力用!B2=管理用!$A2,入力用!B3,"×") 右へフィルコピー 3 昼   B3=IF(入力用!B2=管理用!$A3,入力用!B3,"×") 右へフィルコピー 4 夕   B4=IF(入力用!B2=管理用!$A4,入力用!B3,"×") 右へフィルコピー 5内容   B5=IF(入力用!B2="休暇","×",入力用!B4)   右へフィルコピー あとは各シートに必要に応じて条件付き書式で色づけ設定します。 入力者用シートを作成することで、入力制限になるかと思いました。 (「管理用」シートを非表示にしておいてもいいと思います) 原始的かもしれませんが、ご参考まで。 (こだぬき) ---- ありがとうございます。 入力用と管理用とシートを分ける方法は考え付きませんでした。 おっしゃる通り原始的ではありますが、私に思いつかなかった 方法でした。ありがとうございます。 ただ、1シートで関数だけというのは難しいようですね。 VBAやマクロは触ったことがないのですが、もしそれらを 使って出来るのでしたら、どなたかご教授願えませんでしょうか? ---- マダムさん、こんばんわ。。 初心者なりにトライしてみました。 セルA1が明いているようですから、A1に数字の「1」を入力した時点で通常のシートになりますので、入力後に編集などをしてください。 修正や編集が終わったら、A1の「1」を消去してください。 A1に 1 が表示されていない状態で、2〜4行に数値を入力するとマダムさんの希望する結果になると思います。。 下記のコードを、実行する「シートモジュール」に張り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range If Range("A1").Value = 1 Then ActiveSheet.Unprotect Exit Sub End If On Error Resume Next If Not Intersect(Target, Range("B2:IV4")) Is Nothing Then With Target If IsNumeric(.Value) = True And .Value <> "" Then ActiveSheet.Unprotect Range(Cells(2, .Column), Cells(4, "IV")).Locked = False For Each c In Range(Range("B2"), Cells(4, .Column)) If IsNumeric(c.Value) = False Or c.Value = "" Then c.Interior.ColorIndex = 15 End If Next c Range(Range("B2"), Cells(4, .Column)).Locked = True ActiveSheet.Protect End If End With End If End Sub (kei)