以下のような表があります。
A列…氏名
(中略)
E列…学習期間(月)←入力の際は「5」とか「4」とか数字のみ
F列~J列…上段→提出期限日・下段→提出日 ←例えばF2に提出予定日を入力したらF3に提出日を記入。F列から1回目の提出期限、G列2回目の提出期限…というようになっています。
K列…最終在籍月(最終提出期限日+3ヶ月)
まず、提出期限入力されたら自動的に塗りつぶしてくれないかなぁ…と。
例えばF10の提出日に「12/1」と入力したら、F9~F10を薄い水色にしたいんですね。
また、最終在籍月の3ヶ月前になったら、氏名のところを「ローズ」に塗りつぶしたいなぁ…と。
講座によって3ヶ月だったり6ヶ月だったり4ヶ月だったりするので空白セルになった部分は「青」で塗り潰したいんです。
このデータはA4~J4(J4には提出お願いメール送信した日を入力してます)にタイトルがあり(氏名・講座・主催)、A5、A6を結合して氏名が入力されています。
1人につき2行使用しています。
講座申し込みがあればA7、A8.A9A10…と入力していきます。
よろしくお願い致します。
fuentebellaさんのコメントにあるようにVBAではなく条件付書式で可能なようです。
条件付書式の使い方
http://www.eurus.dti.ne.jp/~yoneyama/Excel/jyo-syo.html
具体的には
F5セルとF6セルの条件付書式を
数式が =F5<>""
書式を水色に。
F5とF6を選択してJ列までコピーし、更に下のにもコピーします。
名前のA5セルの条件付書式は
数式が =DATE(YEAR(K5),MONTH(K5)-3,DAY(K5))>TODAY()
書式を青色。
追加を押して条件2に、
数式が =DATE(YEAR(K5),MONTH(K5)-3,DAY(K5))<=TODAY()
書式をローズに。
結合したA5セルを下にコピーすれば完成です。
質問の意図を自分なりに解釈しましたが間違っていたら、ご指摘ください。
対象のシートのタブを右クリックし、「コードの表示」で表示される部分に下記のコードをコピーして
実行してみてください。
下記のように動作します。
上段=空白、下段=空白・・・青
上段≠空白、下段=空白・・・元のセルの色(たぶん白?)
上段≠空白、下段≠空白・・・水色
色は下記を参照ください。
http://homepage2.nifty.com/miyuki-t/html/excelcolor.html
'// 色の定義 Const CELL_COLOR_BLANK = 5 Const CELL_COLOR_NAME = 38 Const CELL_COLOR_DONE = 20 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range For Each r In Target If r.Column = 1 And r.Row > 6 And r.Row Mod 2 = 1 Then setConditionallyForm r.Row End If Next End Sub Sub setConditionallyForm(rr As Long) '// A列に設定 With Cells(rr, "A").Resize(2, 1) .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, _ Formula1:="=AND(RC11<>"""",(YEAR(TODAY())*12+MONTH(TODAY()))>(YEAR(RC11)*12+MONTH(RC11)-3))" .FormatConditions(1).Interior.ColorIndex = CELL_COLOR_NAME End With '// F から5列(J列)まで設定 With Cells(rr, "F").Resize(1, 5) .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, _ Formula1:="=AND(RC="""",R[1]C="""")" .FormatConditions(1).Interior.ColorIndex = CELL_COLOR_BLANK .FormatConditions.Add Type:=xlExpression, _ Formula1:="=AND(RC<>"""",R[1]C<>"""")" .FormatConditions(2).Interior.ColorIndex = CELL_COLOR_DONE End With With Cells(rr + 1, "F").Resize(1, 5) .FormatConditions.Delete .FormatConditions.Add Type:=xlExpression, _ Formula1:="=AND(RC="""",R[-1]C="""")" .FormatConditions(1).Interior.ColorIndex = CELL_COLOR_BLANK .FormatConditions.Add Type:=xlExpression, _ Formula1:="=AND(RC<>"""",R[-1]C<>"""")" .FormatConditions(2).Interior.ColorIndex = CELL_COLOR_DONE End With End Sub
不明な点はコメントにて対応します。
ありがとうございます!
初めてうまくいきました!!かなり爽快!!)
でも3ヶ月前になる前からA列は塗りつぶされていて…どうもK列に日付を入れると塗りつぶされている感じです。。。
そのままコピーしたのですが、、、なぜでしょう?
ありがとうございます。
ただ、文字の色を変えるのではなく、セルの塗りつぶしをしたいので条件付書式だと厳しいような気がします。
すみません。