[[20100604112456]] 『標準モジュールでの条件付書式』(orange) ページの最後に飛ぶ

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

 

 『標準モジュールでの条件付書式』(orange)

 先生方、ご無沙汰しております。

 過去ログ等を見て、いろいろとやってみたのですが行き詰ってしまいました。

  ◎やりたいこと:条件付書式のON:OFFをやりたい

  ◎設定:ブックにはシートが10枚ぐらいあるが、そのうちの特定の8枚(固定)のみに反映させたい。

  ◎それぞれのシートで反映させたい列は同じ(A・B・K・L・DD列のみ)

  ◎セルの値により、セルの色を変えたい(6種類)

  ◎条件は・・・0〜20未満、20〜40未満、・・・など

  ◎希望:操作シートのコマンドボタンにONとOFFがあり、それにより変化する。

  ◎それぞれのシートには初期の色づけもあり、OFFボタンを押してもその色は残る。

 こんな感じなのですが、可能でしょうか。

 よろしくお願いします。

 >標準モジュールでの条件付書式
 という意図を図りかねますが、まずお使いのEXCEL バージョンは何でしょうか。
 2003 までは書式が3種類までしか扱えないということを御存じの上で、マクロで
 条件付き書式 のようなことをしたいということでしょうか。

 マクロの場合、最後の条件を実現するのは結構面倒だと思います。
 2007 以降の場合、標準機能だけで実装できます。
 (オンオフは条件式に特定のセルの条件を付け加えて、そこに値を置くことで
 対応できると思います。)
 (Mook)

 Excelのバージョンは2003です。
 条件付書式では足りないのでマクロ対応でやろうと考えました。

 シートモジュールの場合だと、全てのシートに貼り付ければいいのかと思いましたが、
 色づけしたいセルには数式が入っており、その結果で色を付けたいのです。
 シートモジュールだと数式の結果にはすぐには反映しないのかと思ったのも一因です。

 もし非常に難しいのであれば、オフのボタンはなくてもいいかもしれません。
 また、計算結果を自動的に反映するのであれば、標準モジュールでなくてもOKです。

 (orange)

 2003以前のバージョンで4つ以上の条件付き書式のような機能を
 マクロで対応したいという要望はよくある要望ですので、まずは
 検索をしてみるとよいかと思います。

http://www.excel.studio-kazu.jp/cgi-bin/estindex/estseek2.cgi?phrase=%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E6%9B%B8%E5%BC%8F+%E4%BB%A5%E4%B8%8A

 (1)やりたいこと:条件付書式のON:OFFをやりたい
 (2)設定:ブックにはシートが10枚ぐらいあるが、そのうちの特定の8枚(固定)のみに反映させたい。
 (3)それぞれのシートで反映させたい列は同じ(A・B・K・L・DD列のみ)
 (4)セルの値により、セルの色を変えたい(6種類)
 (5)条件は・・・0〜20未満、20〜40未満、・・・など
 (6)希望:操作シートのコマンドボタンにONとOFFがあり、それにより変化する。
 (7)それぞれのシートには初期の色づけもあり、OFFボタンを押してもその色は残る。

 難しいのは、(1)、(2)、(7) だと思います。

 動的に条件付き書式を制御すれば(7)は対応可能かもしれませんが、性能が気に
 なりそうです。
 (Mook)

 >(7)それぞれのシートには初期の色づけもあり、OFFボタンを押してもその色は残る。
 OFFボタンを押した時点でシートの色を「塗りつぶしなし」にして、続いて初期の色づけをすれば良いのでは?
 (kei)

 おはようございます。
 改めて過去のログを見て考えましたが、やっぱり分かりませんでした。
 例えばこちら↓ 
[[20050308152110]] 『条件付書式の条件は3つが限度?』(よよ)

 もう一度、整理してやりたいことを考え直しました。
 (1)計算結果のセル値により、セルの塗りつぶしをしたい。(6色)
 (2)条件は、0〜19.999、20〜39.999、・・・、異常値、といった感じです
 (3)ブックにはシートが複数あり、その中の特定のシートのみに反映させる。
 (4)それぞれのシートで反映させたい列は同じ(A・B・K・L・DD列のみ)
 (5)シートによって行数は異なる。
 (6)入力シートの値が変化すると計算結果が変わる為、その都度反映させたい。

 こんな感じになりました。
 よろしくお願いします。

 (1),(6)
  Worksheet_Calculete イベント
 (2)
  Select Case〜ステートメント
 (4)
  For Each...Nextステートメント
 (5)
  Endプロパティ
 等を調べると出来ると思います。
 参考:↓の最初に出ているコード
[[20100504160837]] 『年月で質問した者ですが』(大)
 (PON) 

 >(2)条件は、0〜19.999、20〜39.999、・・・、異常値、といった感じです
 異常値とは?
 0以上 20以上 40以上 60以上 80以上 100以上の6段階にしてみました。
 反映させたいシートにボタンを作成し、「ONボタンクリック」のマクロを登録してください。
 ボタンを押すとそのシートだけに反映します。
 標準モジュールに

 Sub ONボタンクリック()
    Dim c As Range

    For Each c In Range("A:B,K:L,D:D").SpecialCells(xlCellTypeFormulas, 1)
        With c
            Select Case .Value
                Case Is >= 100
                    .Interior.ColorIndex = 41
                Case Is >= 80
                    .Interior.ColorIndex = 42
                Case Is >= 60
                    .Interior.ColorIndex = 43
                Case Is >= 40
                    .Interior.ColorIndex = 44
                Case Is >= 20
                    .Interior.ColorIndex = 45
                Case Is >= 0
                    .Interior.ColorIndex = 46
            End Select
        End With
    Next c
 End Sub

 ColorIndexのリストは、新しいシートを作成して、下記で確認されて数値を変更してください。
   ↓
 標準モジュールに
 Sub 色リスト()
    Dim i As Integer

    For i = 1 To 20
        Cells(i, 1) = i
        Cells(i, 2).Interior.ColorIndex = i
    Next
    For i = 21 To 40
        Cells(i - 20, 3) = i
        Cells(i - 20, 4).Interior.ColorIndex = i
    Next
    For i = 41 To 56
        Cells(i - 40, 5) = i
        Cells(i - 40, 6).Interior.ColorIndex = i
    Next
 End Sub
 (kei)

 ありがとうございます。
 (2)の条件については、0〜20未満、20〜40未満、40〜60未満、100以上、優良値、異常値、
 の6条件になっています。
 ・異常値というのは、計算結果で異常数値になった場合に"異常値"と表記させるもので、
 優良値というのも同様です。
 あと、60〜100未満の場合は、追加の色づけをせず元の色のままでいたい。
 初期の色づけはセルによって異なる色です。(なしだったり、色がついていたり)

 あと、ボタン一つで、該当シート全てを反映させることは可能ですか?
 ちなみにsheet名は、「1組」「2組」・・・「5組」「特別」「共有」「全体」の8シートです。
 何度も何度もすみません。
 (orange)

 すみません。外出していました。。
 「1組」「2組」・・・「5組」「特別」「共有」「全体」の8シートのシートモジュールに

 Private Sub Worksheet_Activate()
    Dim c As Range
    For Each c In Range("A:B,K:L,D:D").SpecialCells(xlCellTypeFormulas)
        With c
            If .Value = "優良値" Then
                .Interior.ColorIndex = 41
            ElseIf .Value = "異常値" Then
                .Interior.ColorIndex = 42
            ElseIf .Value >= 100 Then
                .Interior.ColorIndex = 43
            ElseIf .Value >= 40 And .Value < 60 Then
                .Interior.ColorIndex = 44
            ElseIf .Value >= 20 And .Value < 40 Then
                .Interior.ColorIndex = 45
            ElseIf .Value >= 0 And .Value < 20 Then
                .Interior.ColorIndex = 46
            End If
        End With
    Next c
 End Sub
 要は、シートがアクティブになったときのイベントで色付けするわけです。。
 (kei)

 > あと、60〜100未満の場合は、追加の色づけをせず元の色のままでいたい。
 初期の色づけはセルによって異なる色です。(なしだったり、色がついていたり)
 色付けした後にこの範囲になったら、色はそのままになっちゃうわ。。
 60〜100未満の場合は、初期の色づけをしなきゃ・・。 
 ElseIf .Value >= 60 And .Value < 100 Then
                .Interior.ColorIndex = 47(??)
 のコードを追加すると良いのかな?
 (kei)

 ありがとうございました。
 ご指導頂いたVBAをもとにいろいろやってみて、思い通りのものが出来ました。
 (orange)

コメント返信:

[ 一覧(最新更新順) ]


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