[[20100912175958]] 『今日のセルに色をつける』(SUN) ページの最後に飛ぶ

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

 

『今日のセルに色をつける』(SUN)

 月別シートでE2:AC2には1日〜25日までの日付がdate関数を使用して入れてあります。
 AE2:AJ2には26日〜31までの日付が同様に入れてあります。
 (AD2のセルは印刷の際の中央になるため空白になっています)

 入力の領域は日付に対応してE8:AC57,AE8:AJ57となっています。
 この領域に「今日」に該当する時はセルを黄色で表示したいと思い,
 条件付き書式で 例えばE列ならば
 =E$2=TODAY() の時 黄色 として設定をしました。

 ところが,すでに曜日の設定など条件書式を2つ使っており,
 さらに29日から31日のセルには大の月・小の月・閏年の区別のため
 条件付き書式が3つめの条件として設定していました。
 したがって,1日〜28日まではできたのですが,
 29日以降は条件付き書式では設定できないことがわかりました。

[[20050115131721]] 『条件式書式を6つやりたいんですが・・・』(sirouto)

 など過去ログを参考に調べてみましたが,うまくできませんでした。
 アドバイスをいただければ,幸いです。
 使用するのはエクセル2003です。

 よろしくお願いします。

(SUN)


 こんにちは
 どのへんが、うまくできなかったのですか?
 リンク先の方法でしたら、現在の条件付き書式は全て削除してあるという事ですよね?
 (ウッシ)

 こんにちは!

>リンク先の方法でしたら、現在の条件付き書式は全て削除してあるという事ですよね?

 28日〜31日の範囲は条件付書式が3つめまで入っていますので,
 1〜27日の範囲に設定していた「今日」に該当する入力範囲に設定していた
 条件付書式(3)は削除しています。

 シートモジュールに設定を行うことで今日に該当する範囲に色をつけられないかと
 思っているわけで,昨日から過去ログを検索してみましたが,なかなか該当の
 ものが見つかりません。
 ずらっと入力のエリアが並んでいると,間違えて入力することもありますので
 ニーズはありそうなんですけど・・・・?

 (SUN)

 こんにちは
 対象のセルが同じ場合、シートモジュールに設定を行う場合は現在の条件付書式を全てマクロに置き換える必要があります。

 1〜27日の範囲の2つの条件、28日〜31日の範囲の3つの条件の詳細が分かればマクロで処理出来ます。
 (ウッシ)


 > さらに29日から31日のセルには大の月・小の月・閏年の区別のため
 > 条件付き書式が3つめの条件として設定していました。

 ↑ は小の月の場合、次月の日付を条件付き書式で見えなくしているのでしょうか?
 それを条件付き書式ではなく、数式で処理すればいいのでは?

 (R)


 こんにちは!

 >シートモジュールに設定を行う場合は現在の条件付書式を全てマクロに置き換える必要があります。

 なるほど,あるところは条件付書式で,別の所はシートモジュールで・・・
 という訳にはいかないのですね。φ(..)メモメモ

 >小の月の場合、次月の日付を条件付き書式で見えなくしているのでしょうか?
 >それを条件付き書式ではなく、数式で処理すればいいのでは?

 ペーパで処理していた時代の約束事があり,土曜・日曜・祝日は赤の網掛け
 小の月の31日や2月の29日・30日などは青の網掛けをすることになっています。
 (入力エリアの50行分が対象)
 したがって,表は次のようになっています。

   A  B  C  D  E  F  G  H  I  J  K  L  M  N  
 1
 2
 3
 4             1  2  3  4  5  6  7  8  9  → 日付のデータ(印刷されない) 
 5             一 二 三 四 五 六 七 八 九 → 印刷される日
 6                            → 勤務変更を入力 
 7       水 木 金 土 日 月 火 水 木 → 曜日 
 8       これより下がデータ入力エリア(E8:AC50とAE8:AJ50)

 条件付書式ですがE8:E57のエリアを例にとりますと
  条件1 =E$6="出"    →セルを白に戻す
  条件2 =OR(E$7="土",E$7="日",SUM(E$2)<0,E$6="代",E$6="休")→セルを赤の網掛けにする
 としています。
 条件2により土・日は赤の網掛けに,またE2は別シートに設定したカレンダー情報で祝日は赤で
 表示するため,さらに平日が振替休日になったり臨時休業になったりしたときはE$6に「代」「休」
 入力して赤を表示させます。

 28日〜31にちについては29日を例にとると
 条件1 =AH$6="出"    →セルを白に戻す
 条件2 =$AJ$3<29     →セルを青の網掛けに AJ3のセルの数字で網掛けの判断をします
 条件3 =OR(AH$7="土",AH$7="日",SUM(AH$2)<0,AH$6="代",AH$6="休") 先ほどの条件2と同じです。

 こうして挙げてみると,いろいろ面倒な処理になりそうですが,可能でしょうか。

 (SUN) 
   
 
 

 こんにちは

 条件がイマイチ理解出来ていないんですけど、
 Private Sub Worksheet_Activate()
    Dim v As Variant
    v = Application.Match(CDbl(Date), Range("E4:AJ4"), 0)
    If Not IsError(v) Then
        With Range("E4:AJ4").Cells(1, v).EntireColumn.Range("A8:A50").Interior
            .Pattern = xlGray8
            .PatternColorIndex = 6
        End With
    End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim v As Variant
    Dim r As Range

    If Intersect(Target, Range("E2:AC2,AE2:AJ2,E4:AC4,AE4:AJ4,E6:AC6,AE6:AJ6,AJ3")) _
        Is Nothing Then Exit Sub
    With Range("E8:AC50,AE8:AJ50").Interior
        .Color = xlNone
        .Pattern = xlNone
    End With
    For Each r In Range("E7:AC7, AE7:AJ7")
        With r
            Select Case True
                Case r.Value = "土", r.Value = "日", r.Offset(-5).Value < 0
                    With .EntireColumn.Range("A8:A50").Interior
                        .Pattern = xlGray8
                        .PatternColorIndex = 3
                    End With
            End Select
        End With
    Next
    If Range("AJ3") < 29 Then
        With Range("AE8:AJ50").Interior
            .Pattern = xlGray8
            .PatternColorIndex = 5
        End With
    End If
    For Each r In Range("E6:AC6, AE6:AJ6")
        With r
            Select Case .Value
                Case "出"
                    With .EntireColumn.Range("A8:A50").Interior
                        .Color = xlNone
                        .Pattern = xlNone
                    End With
                Case "代", "休"
                    With .EntireColumn.Range("A8:A50").Interior
                        .Pattern = xlGray8
                        .PatternColorIndex = 3
                    End With
            End Select
        End With
    Next
    v = Application.Match(CDbl(Date), Range("E4:AJ4"), 0)
    If Not IsError(v) Then
        With Range("E4:AJ4").Cells(1, v).EntireColumn.Range("A8:A50").Interior
            .Pattern = xlGray8
            .PatternColorIndex = 6
        End With
    End If
End Sub

 網掛けするセルと判定するセルが別なので、日付のセル範囲と、条件判定セル範囲の値が変更されたら
 網掛けするセル全体を評価しなおしてるので、冗長な処理になってしまいます。
 テストブックで試してみて下さい。


 何となくですが、条件1の"セルを白に戻す"ってのを、条件2と条件3に組み込んでやれば、
 条件付書式だけで出来そうな気がします。

 (川野鮎太郎)


 こんにちは!SUNです。

 シートモジュールでやろうとするとすごいことになってしまうのですね。ビックリです。
 さっそく試してみました。

 私の説明がまちがっていた点がありました。
 データを集約するエリアとして,条件書式
 AK8:BS50の範囲にも別の条件書式が設定してありました。

 そのため,テストをしてみましたら,土曜・日曜・祝日が網掛けになったのと同様
 AK8:BS50の範囲にも網掛けが入ってしまいました。
 現在の分だけでもこれだけのマクロになっていますので,
 AK8:BS50の範囲の条件を挙げてとなれば・・・・。

 おそらく(ウッシ)さんが考えてくださったのだと思いますが,
 (川野鮎太郎)さんのおっしゃるように条件を見直すことで
 対応しようかと思います。
 最悪,小の月,2月については条件付書式を外し,手作業で
 網掛けを入れてもらおうかと思います。

 このたびは貴重な時間を使ってアドバイスをいただき,本当にありがとうございました。
 とても勉強になりました。
 もう少し,頭の体操をしてみたいと思います。

 (SUN)


コメント返信:

[ 一覧(最新更新順) ]


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