dポイントプレゼントキャンペーン実施中!

エクセルについて質問です。シフトを作成しています。
sheet1
B1からc1d1.....の順に1日から31日まで日付が入っています。
A2からa3a4....の順に氏名が入っています。
B2から下はそれぞれのシフトが入力されています。(a b c d 欠 など)
sheet2
A列にはsheet1と同順で氏名が入っています。
B1からc1d2...と時間が入力されており15フン単位で刻まれています。

例えばaシフトが9~18時までのシフトだった場合、sheet2のその氏名に応じて氏名の横のセルに上の時間の範囲だけ色を入力できる設定方法を教えてください 。加えてsheet2上の何処かで日付を変更するとsheet1の同日の列のシフトを読んで、その日の書式を自動設定する方法を教えてください。Abcd...以外の欠などのシフトの場合は、書式設定は不要です。
よろしくお願いいたします。

A 回答 (3件)

マクロの一例です




Sub Macro4()
Set kiten = Sheets(1).Range("A1")
hiduke = Day(Sheets(2).Range("A1").Value)
Sheets(2).Select
Range("A2").Select
While Selection.Value <> ""
Rows(Selection.Row).Interior.ColorIndex = xlNone
Select Case kiten.Offset(Selection.Row - 1, hiduke)
Case Is = "a"
With Range(Selection.Offset(0, 1), Selection.Offset(0, 5)).Interior
.Color = vbRed
End With
Case Is = "b"
With Range(Selection.Offset(0, 3), Selection.Offset(0, 8)).Interior
.Color = vbRed
End With
Case Is = "c"
With Range(Selection.Offset(0, 5), Selection.Offset(0, 10)).Interior
.Color = vbRed
End With
Case Is = "d"
With Range(Selection.Offset(0, 7), Selection.Offset(0, 12)).Interior
.Color = vbRed
End With

End Select
Selection.Offset(1, 0).Select
Wend
End Sub

Sheet2のA1セルにシフトを表示したい日付を入れて実行すると塗りつぶします
各ケースの
With Range(Selection.Offset(0, 1), Selection.Offset(0, 5)).Interior
Offsetで指定した範囲を塗りつぶします上記の場合2列目から6列目までを塗りつぶします
タイムシフトにあわせて範囲を指定してください

このマクロはあくまで一例、変更する要素は多数有りますので後はご自信で工夫を
    • good
    • 0
この回答へのお礼

ありがとうございます。うまく動作しました。
またわからないことがあれば、質問いたします。

お礼日時:2011/03/25 22:22

追記:


先のマクロのSheet2!A1セルに入力する日付はX月X日と入力する必要が有ります3/6とか4-15などと入力してください

単純に1とか5と入力する場合は3行目の

hiduke = Day(Sheets(2).Range("A1").Value)
の部分を

hiduke = Sheets(2).Range("A1").Value
と変更してください

変更すると日付形式の入力では逆に正常動作しませんので、入力形式をどちらかに固定する必要が有ります
    • good
    • 0

セルの塗りつぶしのみであれば、条件付書式で可能ですね



Sheet1のA1セルに[kiten]、Sheet2の日付を入力したセルに[hiniti]と名前付け
Sheet2へ条件付書式
OFFSET(kiten,ROW()-1,DAY(hiniti))="a"
を設定すると塗りつぶしがされます

シフトによって時間帯が変化するの場合、そのセルが塗りつぶされる時間帯のシフトの計算式をor関数で連記する
例:aのシフトがB列からD列まで、bのシフトがC列からF列まで、cのシフトがF列からI列までの場合
条件付書式計算式
B2セル:OFFSET(kiten,ROW()-1,DAY(hiniti))="a"
C2セル~D2セル:OR(OFFSET(kiten,ROW()-1,DAY(hiniti))="a",OFFSET(kiten,ROW()-1,DAY(hiniti))="b")
E2セル:OFFSET(kiten,ROW()-1,DAY(hiniti))="b"
F2セル:OR(OFFSET(kiten,ROW()-1,DAY(hiniti))="b",OFFSET(kiten,ROW()-1,DAY(hiniti))="c")
G2セル~I2セル:OFFSET(kiten,ROW()-1,DAY(hiniti))="c"
と設定し、B2:I2を選択して下方向に書式をコピーで

この回答への補足

Web2525さんありがとうございます。
正直、言いますと上記書式設定ではうまく動作しません。やり方が悪いのか、作動しません。
できれば、マクロで設定することは可能でしょうか。
よろしくお願いいたします。

補足日時:2011/03/24 22:32
    • good
    • 0

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