人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

私の苦手なVBAを教えてください。
以下のような表があります。
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…と入力していきます。


よろしくお願い致します。

●質問者: kanachan
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:A8 F3 VBA セル タイトル
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●25ポイント

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セルを下にコピーすれば完成です。


質問の意図を自分なりに解釈しましたが間違っていたら、ご指摘ください。

◎質問者からの返答

ありがとうございます。

ただ、文字の色を変えるのではなく、セルの塗りつぶしをしたいので条件付書式だと厳しいような気がします。

すみません。


2 ● Mook
●45ポイント

対象のシートのタブを右クリックし、「コードの表示」で表示される部分に下記のコードをコピーして

実行してみてください。


下記のように動作します。

上段=空白、下段=空白・・・青

上段≠空白、下段=空白・・・元のセルの色(たぶん白?)

上段≠空白、下段≠空白・・・水色

色は下記を参照ください。

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列に日付を入れると塗りつぶされている感じです。。。

そのままコピーしたのですが、、、なぜでしょう?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ