[[20070920142740]] 『マクロで塗りつぶし』(のの2) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで塗りつぶし』(のの2)

 WIN…XP EXCEL…2003
 いつもお世話になっております。
 塗りつぶしをするマクロで教えていただけないでしょうか。

 A 〜  Q までデータが入っています。M列には作成日が入っています。
 A  B  C  D  E  F  G  H  I  J  K  L    M    N  O  P    Q
                                 有・無 作成日   有・無
 そこで…
 【現状】 
 1.条件付書式でB列に文字が入力されるとA〜Q列までセルに枠線がつく
 2.L列が「有*」だったら A〜Q列を 紫色で塗りつぶし(手動)
 3.P列が「無し」なら M列 を黄色で塗りつぶし(手動)
 4.M列の日付が「今日」の1ヶ月前になったらM列をオレンジで塗りつぶし(手動)
 5.M列の日付が「今日」の翌日からはM列をグレーで塗りつぶし(手動)
 以上のように、それぞれのセルを塗りつぶしています。

 これを…手作業ではなくマクロで出来たら…と思うのです。
 そこで、過去ログを色々みていて下記のコードを見つけました。

  Private Sub Worksheet_Change(ByVal Target As Range)
  '変数宣言
  Dim colr As Integer
  Dim c As Variant
      If Target.Count > 1 Then Exit Sub
      If Target.Column <> 1 Then Exit Sub
          For Each c In Target
              Select Case c.Value
                  Case "さる"
                      colr = 3  'ここの色番号をお好きなように
                  Case "くま"
                     colr = 5 '々
                  Case "とり"
                      colr = 6  '々
                  Case "いぬ"
                      colr = 4 '々
                  Case "ねこ"
                      colr = 8 '々
                  Case "あゆ"
                      colr = 7 '々
                  Case Else
                      colr = xlNone
              End Select
              c.Interior.ColorIndex = colr
      Next c
  End Sub

 このコードの場合は、A列に「くま」と入力されるとA列に5番の色がつきますが
 A列の条件があったらA列の色が変わる…のではなく、現状手作業でやっているように
 P列が「無し」ならM列が黄色になる場合や、日付によって条件が変わる場合は
 どうしたらいいでしょう。

 宜しくお願い致します。


 >2.L列が「有*」だったら A〜Q列を 紫色で塗りつぶし(手動)
 >3.P列が「無し」なら M列 を黄色で塗りつぶし(手動)
 有・無とは入力するの?入力規則のリスト選択?

 条件付き書式は3つの条件を全て使い切っているの?
 (じゅんじゅん)

 (じゅんじゅん)さん

 >有・無とは入力するの?入力規則のリスト選択?
 有・無は手入力です。入力規則は使用していません。

 >条件付き書式は3つの条件を全て使い切っているの?
 罫線を引く分のみです。

 ふたつのシートをひとつにまとめようと思っていて、前のシートでは手入力だった書式を
 条件を入力したら自動的に変わるようにできたら…と思っている次第です。
 (のの2)


 1.条件付書式でB列に文字が入力されるとA〜Q列までセルに枠線がつく
 4.M列の日付が「今日」の1ヶ月前になったらM列をオレンジで塗りつぶし(手動)
 5.M列の日付が「今日」の翌日からはM列をグレーで塗りつぶし(手動)

 条件付き書式 (範囲はM1〜M??とした場合)
 条件1) 従来のもの
 条件2) 「数式が」
          =AND(B1<>"",(M1-TODAY())<31) と入力  書式は 枠線と オレンジの塗りつぶし
 条件3) 「数式が」
          =AND(B1<>"",M1<TODAY())    と入力  書式は 枠線と グレーの塗り潰し

 2.L列が「有*」だったら A〜Q列を 紫色で塗りつぶし(手動)
 3.P列が「無し」なら M列 を黄色で塗りつぶし(手動)
 これもM列を塗りつぶすけど、優先順位は?
 (じゅんじゅん)

 (じゅんじゅん)さん

 L列の「有*」と他の条件が重なる場合は、 A〜Q列を紫で塗りつぶした状態で、
 M列の色が黄色やグレーになっていてほしいです。

 あと、TODAY関数を入れる場合は、どこかに「=TODAY()」を入れておけばいいのでしょうか?

 (のの2)

 >L列の「有*」と他の条件が重なる場合は、 A〜Q列を紫で塗りつぶした状態で、
 >M列の色が黄色やグレーになっていてほしいです。
 >3.P列が「無し」なら M列 を黄色で塗りつぶし(手動)
 では、黄色と(グレー・オレンジ)はどちらが優先?

 >あと、TODAY関数を入れる場合は、どこかに「=TODAY()」を入れておけばいいのでしょうか?
 「数式が」の横のバーに上の式を入れてもらえばいいはずです。
 (じゅんじゅん)

 (じゅんじゅん)さん

 黄色の条件を最後に入力するので…黄色を優先にしたいです。

 >「数式が」の横のバーに上の式を入れてもらえばいいはずです。
 了解しました! 条件付書式にそのまま式を入力したらいいんですね。
 ありがとうございます。 
 (のの2)


 >3.P列が「無し」なら M列 を黄色で塗りつぶし(手動)
 まず条件付き書式でM列をグレー又はオレンジで塗りつぶすようにすれば、ファイルを開いた時に
 それは実行されます。
 そのご、P列の値が変化した時に黄色に塗っても、ファイルを保存し閉じて、再度開くと条件付き書式
 の方で塗りつぶされると思います。
 書き込んだP列の値をもう一度書き込まないと黄色にはならないかも。

 そこまでM列を黄色にする必要性は、やっぱりあるのでしょうか?

 或いは1.のB列に入力があった場合、M列にも必ず入力を行なうのであれば、M列の条件1をなくして
 条件1に黄色になる条件 
 「数式が」 =AND(B1<>"",P1="無")  書式 枠線 と 黄色塗りつぶし

 条件2と3はそのままと言う方法もできるかも。
 この場合、M列は、黄色・グレー・オレンジのどれかになっています。
 ⇒B列に入力があればですけど。
 (じゅんじゅん)

 残りは、M列を除くA〜Q列を選択
 条件付き書式で 条件1
 [数式が」
 =AND($B1<>"",$L1="有")  書式 枠線 と 紫塗りつぶし
         条件2
 「数式が」
 =$B1<>""        書式 枠線

 (じゅんじゅん)

 M列の条件付き書式のおさらい

 条件1に黄色になる条件 
「数式が」 =AND(B1<>"",P1="無")  書式 枠線 と 黄色塗りつぶし

 条件2にオレンジになる条件
 =AND(B1<>"",(M1-TODAY())<31,M1>=TODAY()) と入力  書式は 枠線と オレンジの塗りつぶし

 条件3にグレーになる条件
 =AND(B1<>"",M1<TODAY())    と入力  書式は 枠線と グレーの塗り潰し

 で、どうでしょうか?
 (じゅんじゅん)

 >で、どうでしょうか?
 (じゅんじゅん)

 やっぱり条件が1つたりませんでした。
 申し訳ないです。
 (じゅんじゅん)

 そのシートタブを右クリック⇒コードの表示に
 Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
       If .Column <> 2 Then Exit Sub
       If .Cells.Count > 1 Then Exit Sub
       If .Value <> "" Then
          With .Offset(, -1).Resize(, 17)
               .Borders.LineStyle = xlContinuous
               .Borders(xlInsideVertical).LineStyle = xlContinuous
          End With
       ElseIf .Value = "" Then
          With .Offset(, -1).Resize(, 17)
               .Borders.LineStyle = xlNone
               .Borders(xlInsideVertical).LineStyle = xlNone
          End With
       End If
  End With
 End Sub
 これをコピペする。(B列に値が入ると、A列〜Q列まで罫線を引く。B列が空白だと罫線は消える)

 M列を除くA〜Q列を選択
  条件付き書式で 条件1
  [数式が」
  =AND($B1<>"",$L1="有")  書式 紫塗りつぶし

 M列の条件付き書式

  条件1に黄色になる条件 
 「数式が」 =AND(B1<>"",P1="無")  書式 黄色塗りつぶし

  条件2にオレンジになる条件
  =AND(B1<>"",(M1-TODAY())<31,M1>=TODAY()) と入力  書式は オレンジの塗りつぶし

  条件3にグレーになる条件
  =AND(B1<>"",M1<TODAY(),M1<>"")    と入力  書式は  グレーの塗り潰し

 でいけると思います。
 だいぶ長くなりましてすいません。
 (じゅんじゅん)

 (じゅんじゅん)さん

 いろいろありがとうございます。 早速やってみました。

 それで……………大変申し訳ないのですが…条件の訂正があります。
 「作成日」を基準に期限の有無を色で表示したかったわけなのですが
 たとえば、2007/9/21に作成をするとその1年後の2008/9/21が期限切れ→グレー
 期限切れになる1ヶ月前の2008/8/21になると→オレンジ
 になってほしかったのでした。きちんと説明できていなくてすみません。
 「今日+1年」という感じになるのでしょうか???
 その場合は、
 条件2にオレンジになる条件
 =AND(B1<>"",(M1-TODAY())<31,M1>=TODAY()) と入力  書式は オレンジの塗りつぶし
 条件3にグレーになる条件
 =AND(B1<>"",M1<TODAY(),M1<>"")    と入力  書式は  グレーの塗り潰し
 をどう変えたらいいのでしょう。

 それから、マクロで罫線を引く分ですが、新規でB列に入力するとA〜Q列まで枠線が引かれる
 のですが、すでに入力済みの部分はA列しか枠線が引かれません。
 これはどうしたら…(>_<)

 もう少しお助けくださいませ。
 (のの2) 

 >すでに入力済みの部分はA列しか枠線が引かれません。
 下記のコードを標準モジュールにコピペして実行してみて下さい。

 Sub test()
   Dim r As Range
   For Each r In Range("B1", Cells(Rows.Count, "B").End(xlUp))
       r.Value = r.Value
   Next
 End Sub

 M列の件については、期限日を別のセルに表示させた方が扱いやすいかと思います。
 数式が長くなってしまい受け付けてもらえませんでした。
 (じゅんじゅん)

 (じゅんじゅん)さん

 早速ありがとうございます。

 >下記のコードを標準モジュールにコピペして実行してみて下さい。
 ツール―マクロ―Visual Basic Editor―標準モジュールタブ―モジュール1 に
 コピペでいいんですよね。
 マクロの実行をしてから枠線が付くまでに時間がかかったのと、他のシートにもデータが
 あるので、ちょっとドキドキしてました(・ω・;) でも、無事に枠線はつきました!!

 >M列の件については、期限日を別のセルに表示させた方が扱いやすいかと思います。
 M列の横に1行挿入し、=M1+365 にしました。それで、M列の条件付書式の M1をN1にしました。
 マクロのほうも1行増えたので、「17」が列数のようなので「18」にしました。
 ちゃんと出来ているか若干不安ですが、ぱっとみた感じ大丈夫そうです。

 ありがとうございました!!
(のの2)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.