[[20120929205744]] 『3つ以上の条件を色分け』(ひますけ) ページの最後に飛ぶ

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

 

『3つ以上の条件を色分け』(ひますけ)
まずは下記の手番数での数値で、
現状、0〜1.0は赤、1.1〜2.0は黄、2.1以上は青にと
条件付き書式で色分けしていますが、
0〜1.0は赤、1.1〜2.0は黄、2.1〜3.0は青、3.1以降は紫と4色で色分けをしたいと考えています。

      10/1 10/2 10/3 10/4
受注数
計画数
在庫数
手番数

それと、この形が1つの品番で、50品番以上同じ配列があります。

過去ログで色々拝見しましたが→VBAでは出来る事が解った→VBAは経験なし?→VBAや文章が理解できない…?
なので、大変申し訳ありませんが教えて頂きたいです。
Excel2003,WindowsXP

(ひますけ)


 >それと、この形が1つの品番で、50品番以上同じ配列があります。 

 1品番4行構成で下にずっと続いていて、その中の手番数の行だけに着色ということでいいのかな?

 (ぶらっと)


 空欄や数値以外も色が付いてしまいますが、初めにその列を赤にしておけば、
 残り三つの条件を設定することで、4色の設定ができます。

 上記の制限が嫌であれば、マクロになりますけれど・・・。
 (Mook)

 Mookさんの提案はぜひ検討して欲しいね。

 で、それでもVBAということなら、レイアウトを明確にして欲しいのと(受注数等はA列? 品番がどこかにあるのでは?)
 色づけの条件として手番数だけなのか、受注数〜手番数に色をつけたいのか。

 念のために、文字色をつけるんだよね。それとも背景色?

 (ぶらっと)

 文字色やったら条件付き書式と表示形式の併用でできるんちゃいますか?

 参考までに表示形式のユーザー定義

 [紫][>=3.1]0.0;0.0

 手番数とやらの行だけに色をつけるんやったらの話ですけど。

 (よみびとしらず)


 そういえば、文字色か塗りつぶし化が書かれていませんでしたね。
 文字色であれば、よみびとしらずさんの案でいけば
 2003以前でも5条件(6条件?7条件?)いけるでしょうか。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/user_set.htm
 (Mook)

みなさんご意見ありがとうございます。

文章足らずですみません。
まず、色付けは、背色の塗りつぶしの方です。
色付けの条件は、手番数だけです。

>1品番4行構成で下にずっと続いていて、その中の手番数の行だけに着色ということでいいのかな?
そうです。 
正確には、1品番で5行構成と6行構成があります。

あとレイアウトですが、A〜Iは品番品名などあり、手番数のセルはJ8です。

   A B C D E F G H I   J    K   L 
1                         10/1 10/2
2
3
4
5
6
7
8                    手番数  1.2  2.5

それとMookさんのご提案の方ですが、今はそのようにしていまして
青をベースに4色分けをしていますが、#DIV/0のセルも同じ青色の為見づらいのが現状です。
なので#DIV/0のセルは白のままにしたいです。

(ひますけ)


 それでは以下で試してみて。

 Sub Sample()
    Const clPurple As Long = 13082801
    Dim c As Range
    Dim f As Range
    Dim r As Range
    Dim x As Long
    Dim myColor As Long

    With Sheets("Sheet1")
        x = .Cells(1, .Columns.Count).End(xlToLeft).Column
        .Columns("J").Resize(, x - 9).Interior.ColorIndex = xlNone

        Set c = .Columns("J").Find(What:="手番数", LookAt:=xlWhole)
        If c Is Nothing Then
            MsgBox "手番数の行が見つかりません"
            Exit Sub
        End If

        Set f = c

        Do
            For Each r In .Range(c.Offset(, 1), .Cells(c.Row, x))

                If Not IsError(r.Value) Then

                    Select Case r.Value
                        Case Is > 3
                            myColor = clPurple
                        Case Is > 2
                            myColor = vbBlue
                        Case Is > 1
                            myColor = vbYellow
                        Case Else
                            myColor = vbRed
                    End Select

                    r.Interior.Color = myColor

                End If

            Next

            Set c = .Columns("J").FindNext(c)

        Loop While c.Address <> f.Address

    End With

 End Sub

 (ぶらっと)

ぶらっとさん ありがとうございます。

すみません。VBAは初めてで正直トンチンカンなのですが…
上記の文をコピー→エクセル下部タブのコードの表示→VBに文を貼り付け。
以上行いました。
が、VBの文1行目にて

⇒Sub Sample() ※黄色で塗りつぶしになっており

エクセル上部のファイル名右端に .xls[中断] がでています?

条件付き書式は削除し、セル色も塗りつぶし無しに戻しましたが
何も変化がありません?

(ひますけ)


 横から失礼します。
 (ぶらっと)さんがおでかけのようですので、初心者ですが、代わりにコメントします。

 このコードを貼り付ける場所は
 >上記の文をコピー→エクセル下部タブのコードの表示→VBに文を貼り付け。

 ではなくて、

 Alt+F11でVBEの画面を開き、挿入→標準モジュール で開いた画面に貼り付けてください。

 (ぶらっとさん、便乗回答、すみません。今回もコードの勉強をさせていただいています。)

 追記 ちなみにマクロを実行するには、貼り付けた後,VBE画面を閉じ、エクセル画面に戻り、
 Alt+F8で実行します。(すでに、ご存知でしたら、スルーしてください。)

 (usamiyu)


 (usamiyu) さん フォロー並びに完璧な回答ありがとうございます。

 (ひますけ)さん 蛇足ですが以下追記。

 >上記の文をコピー→エクセル下部タブのコードの表示→VBに文を貼り付け。 

 これは、そのシートの「シートモジュール」という場所なんだけど、それでもエラーにはならないはず。
 おそらく、貼り付けた後、F8 (ステップ実行)をおして、コードの最初の Sub Sample() が
 ステップ実行対象コードとして黄色く光っているんだと思う。

 シートモジュールでも、いいんだけど、このコードは、「標準モジュール」というところに
 貼り付けて使うことを想定。

 ・今貼り付けたコードはすべて削除(クリア)
 ・このVBEの画面で、挿入 -->標準モジュール
 ・でてきたところに貼り付け
 ・なお、1ヶ所、With Sheets("Sheet1")
  これは、実際のシート名になおしておいてね。

 で、このVBA画面の左上のXボタンをおして画面を閉じ、エクセル画面に戻る。

 このマクロを動かす方法は、(usamiyu)さんの回答の他、たとえば

 ・エクセル画面で ツール-->マクロ-->マクロ で、でてくる画面で Sample を選んで実行
 ・エクセル画面で ツール-->マクロ-->マクロ で、でてくる画面で オプション を選んで
  半角小文字アルファベット( z 等 )の任意のショートカットキーを設定してOK
   エクセル画面で Ctrl/z 等をおすと実行される。
 ・シートにフォームツールのボタン等を配置して、そのボタンにマクロ登録。

 (ぶらっと)
  

 To (ぶらっと)さん

 敬愛するぶらっとさんにお礼など言われてしまうと、あがってしまいます^^;

 >「シートモジュール」という場所なんだけど、それでもエラーにはならないはず
 エラーにはならないんですね。これは知らなかったです。

 私の中ではシートモジュールは、ユーザーがクリックや選択をしたらマクロが実行される
ようなコードのときに貼り付けるところという認識ですが、シートモジュールとThisWorkbook
モジュールの違いがまだわかっていません。
(参考書がはかどらなくて・・(笑))

 実行方法もいろいろありますね。ショートカットキー設定はしたことないです。
 私はいつも、Alt+F8でした。
もしかしたら、(ひますけ)さんはAltを押してなかったのかもしれませんね。
いつも質問者さんの状況を深く想像してくださるぶらっとさんは、やっぱり素敵ですね!!

(usamiyu)


ぶらっとさん、usamiyuさん 
ご丁寧に教えていただき、ありがとうございます。

まずは、できました(~o~)♪

初めてなので、エクセルが機械的に動く感に(*_*)ビックリです^_^;

あと、マクロを入れて、
・表最上部の項目や日付欄(A2、B2→)や、計画(J6、K6→)に色を入れていたのですが消えてしまいました。

・色変化ですが、0〜1.0は赤、1.0〜2.0黄、2.0〜3.0青で、
3.0〜3.5で灰色になります?3.5以上は紫で、計5色変化しています。

・BD列までマクロが効きますが、BE列からは変化しません。

あと、青色ですが濃く数字が見づらいのでエクセルパレットの2番目のやや薄い青が希望です。(*^_^*)
それと、今入れている条件付き書式は削除すべきでしょうか?

色々長くなりましたが、よろしくお願いします。

(ひますけ)


 まず指摘のあった事項について

 >表最上部の項目や日付欄(A2、B2→)や、計画(J6、K6→)に色を入れていたのですが消えてしまいました。 

 アップしたコードはそのような仕様。今回のコードは、手番数行のK列以降の対象領域以外の色はそのままにした。

 >色変化ですが、0〜1.0は赤、1.0〜2.0黄、2.0〜3.0青で、 
 >3.0〜3.5で灰色になります?3.5以上は紫で、計5色変化しています。 

 う〜ん・・コードでは4種類の色しかセットしていない。5段階というのが???
 条件付書式が削除されていないようなので、それとの干渉かな?
 ただし、2007以降を意識して紫も含めて色番号での処理にしたけど、2003なのでカラーインデックス処理のほうが
 よりわかりやすいかもしれない。今回のコードはカラーインデックスを使用。

 >BD列までマクロが効きますが、BE列からは変化しません。 

 コードでの色つけ処理の対象列はK列から1行目の値が入っている最後の列まで。
 BE列や、それ以降の列の1行目にも値が入っている?

 >あと、青色ですが濃く数字が見づらいのでエクセルパレットの2番目のやや薄い青が希望です。(*^_^*) 

 カラーインデックス処理に変えるとともに、色を少し変更。
 実際の色とカラーインデックスの紐付けは、たとえば
http://www.geocities.jp/chiquilin_site/data/files/color_number.html
 コードの中の番号セットのところを、この中から好みの色に変えて変更することもできるよ。

 >それと、今入れている条件付き書式は削除すべきでしょうか? 

 うん。削除しておいてね。
 で、コード。

 Sub Sample2()
    Dim a As Range
    Dim c As Range
    Dim f As Range
    Dim r As Range
    Dim x As Long
    Dim myColor As Long

    With Sheets("Sheet1")
        x = .Cells(1, .Columns.Count).End(xlToLeft).Column

        Set c = .Columns("J").Find(What:="手番数", LookAt:=xlWhole)
        If c Is Nothing Then
            MsgBox "手番数の行が見つかりません"
            Exit Sub
        End If

        Set f = c

        Do
            Set a = .Range(c.Offset(, 1), .Cells(c.Row, x))
            a.Interior.ColorIndex = xlNone
            For Each r In a

                If Not IsError(r.Value) Then

                    Select Case r.Value
                        Case Is > 3
                            myColor = 39    'ラベンダー 濃い紫なら13
                        Case Is > 2
                            myColor = 8     '水色
                        Case Is > 1
                            myColor = 6     '黄色
                        Case Else
                            myColor = 3     '赤
                    End Select

                    r.Interior.ColorIndex = myColor

                End If

            Next

            Set c = .Columns("J").FindNext(c)

        Loop While c.Address <> f.Address

    End With

 End Sub

 (ぶらっと)

ぶらっとさん 

色々すみません。ありがとうございます。

今からやってみます。

結果はまた連絡しますね。

(ひますけ)


 To (ぶらっと)さん

 (ひますけさん、何度も横入り、すみません。一緒に勉強させてください。 m(__)m )

 >手番数行のK列以降の対象領域以外の色はそのままにした。

 なるほど〜 こうすればよかったんですね。難しく考えて、6行目に色のついてるのだけ、
除いて、xlNoneにするってどうしたらいいんだろう・・・と悩んでいました。
発想の問題ですね。

 色の種類は私が試した結果も4色になっています。5色っていうのは何でしょうね??

 >コードでの色つけ処理の対象列はK列から1行目の値が入っている最後の列まで。
 x = .Cells(1, .Columns.Count).End(xlToLeft).Column のところですね。
 先日すっかりお世話になった最終行の範囲取得と同じで、最終列の範囲取得ですね。
 最終行とか最終列とかの指定をするケースって多いから便利ですねぇ。

 (usamiyu)


ぶらっとさん ありがとうございました。

出来ました(^.^)

ほんとマクロってすごいですね!!
今日会社で、皆さん「ふ〜ん!」でしたけど
だけど普通は出来ない事に、ちょっとびっくりしてました(^^ゞ

usamiyuさん、入ってきてもらっても全然です(~o~)v
とても難しい話で私にはちんぷんがんぷん??ですが…^_^;

ぶらっとさんが凄い人は、解りました(*^_^*)

私も、皆さんのようになりたいです。
(まずは、数式でどうにか?!からですかね)

追伸
今日も生産会議で、問題→けんか勃発?になりました。
ほんの些細な事、みんな頑張っているからこそ
私は影から、みんなが現場が見えるように手助けできるよう
私が、ぶらっとさんに教えて頂いたように
頑張ります!!

ありがとうございました(^.^)
また、よろしくお願いします。

では

(ひま)


コメント返信:

[ 一覧(最新更新順) ]


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