• ベストアンサー

記入した数値によってセルの色分けをしたい

エクセル2000で、セルにある値を入力したらセルの色が自動で変わるようにしたいです。 入力する数値は、-100から+100の範囲、それとブランク(入力なし)です。 表示するセルの色は、10色以上欲しいです。 セルの数は365*20位です。 いまは、条件付書式で4色まで、表示できています。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんばんは。回答が遅れまして申し訳ございません。早速サンプルマクロを組んでみました。次のように操作してみて下さい。シート1にデータが入力されているということを前提にします。もし違っているのであれば、Sheet1と書いてある部分を例えばシート2に入力されているのであればSheet2と読みかえて下さい。 1.データの入っているブックを開く。 2.Sheet1にコマンドボタンを2個配置する。  ・ファイルメニューにマウスポインターをあわせて右クリックし、出てき  たプルダウンメニューのVisual Basicをクリックする。  ・出てきたツールバーの右から3番目(コントロールツールボックス)をク  リックし、コントロールツールボックスの一番右側の上から2番のコマ  ンドボタンをクリックし、シートの適当な位置でクリックする。(2回繰  り返す。)  ・ツールバーの2番目(デザインモード)のボタンが押された状態になって  いたらそのボタンをクリックしてOFFの状態にする。 3.ALT+F11を押してVBE画面を立ち上げ、VBAProjectと書いてある下のSheet1の部分にマウスポインターをあわせてダブルクリックし、右側の白い部分に下記のコードをコピー・ペーストする。 4.ALT+F11を押してシート1の画面に戻り、データを入力後コマンドボタンを押す。 あなた様のおやりになりたいことが実現しているはずです。 なお、色につきましては、手操作でセルに色をつける作業をマクロ記録でとると、色のインデックス番号を取得することができます。 もし、不都合なこと・お解りにならないことがありましたらご遠慮なくお知らせ下さい。あなた様のおやりになりたいことが実現できるまで私でよろしければ一緒に考えていきたいと思います。 Private Sub CommandButton1_Click() Dim myCmd As Integer Dim myRange As Range Dim myCell As String myCmd = 1 If CommandButton1.Caption <> "個別選択" Then CommandButton1.Caption = "個別選択" With CommandButton1.Font .Size = 14 .Bold = True End With End If For Each myRange In Range("C9:AG30") myCell = myRange.Address Call Sheet1.myColor(myCmd, myCell) Next For Each myRange In Range("AJ9:BN30") Call Sheet1.myColor(myCmd, myCell) Next Call Sheet1.myColor(myCmd, myCell) End Sub Private Sub CommandButton2_Click() Dim myCmd As Integer Dim myCell As String Dim myRange As Range myCmd = 2: myCell = ActiveCell.Address If CommandButton2.Caption <> "全選択" Then CommandButton2.Caption = "全選択" With CommandButton2.Font .Size = 14 .Bold = True End With End If Call Sheet1.myColor(myCmd, myCell) End Sub Sub myColor(myCmd As Integer, myCell As String) If myCmd = 2 Then myCell = ActiveCell.Address End If Select Case Range(myCell).Value Case -100 Range(myCell).Font.ColorIndex = 11 Case -10 Range(myCell).Font.ColorIndex = 5 Case 0 Range(myCell).Font.ColorIndex = 41 Case 10 Range(myCell).Font.ColorIndex = 10 Case 15 Range(myCell).Font.ColorIndex = 14 Case 20 Range(myCell).Font.ColorIndex = 43 Case 25 Range(myCell).Font.ColorIndex = 6 Case 30 Range(myCell).Font.ColorIndex = 46 Case 35 Range(myCell).Font.ColorIndex = 52 Case 40 Range(myCell).Font.ColorIndex = 13 Case 100 Range(myCell).Font.ColorIndex = 42 End Select End Sub

ki-aaa
質問者

お礼

何とか、使えそうなマクロになりましたので問題がないかどうか見てもらえれば嬉しいです。 教えてもらった、マクロがなければ、一ヶ月は有にかかっていたと思います。 Private Sub CommandButton1_Click() Dim myCmd As Integer Dim myRange As Range Dim myCell As String myCmd = 1 If CommandButton1.Caption <> "個別選択" Then CommandButton1.Caption = "個別選択" With CommandButton1.Font .Size = 14 .Bold = True End With End If Call Macro2 For Each myRange In Range("C9:AG30") myCell = myRange.Address Call Sheet1.myColor(myCmd, myCell) Next For Each myRange In Range("AJ9:BN30") myCell = myRange.Address Call Sheet1.myColor(myCmd, myCell) Next Call Sheet1.myColor(myCmd, myCell) End Sub Sub myColor(myCmd As Integer, myCell As String) Select Case Range(myCell).Value Case Is = "" Case Is < -20 Range(myCell).Interior.Color = RGB(200, 100, 230) Case Is < -10 Range(myCell).Interior.Color = RGB(200, 200, 130) Case Is < 0 Range(myCell).Interior.Color = RGB(200, 200, 230) Case Is < 10.5 Range(myCell).Interior.Color = RGB(200, 200, 0) Case Is < 15.5 Range(myCell).Interior.Color = RGB(0, 200, 200) Case Is < 20 Range(myCell).Interior.ColorIndex = 43 Case Is < 25 Range(myCell).Interior.ColorIndex = 10 Case Is < 30 Range(myCell).Interior.ColorIndex = 5 Case Is < 35 Range(myCell).Interior.ColorIndex = 6 Case Is < 40 Range(myCell).Interior.ColorIndex = 7 Case Is < 100 Range(myCell).Interior.ColorIndex = 42 End Select End Sub >数字ではなく、セルの枠そのものの色を変えたいのです 解決しました。 >全選択の選択肢を無くし 削除しましたが、これでよかったでしょうか、余分なところを消していないでしょうか。 >他のマクロからサブとして呼び出して このマクロから、他のマクロを呼び出して(Call Macro2)に変えました。 非常に、ありがかたったです。 また質問したときは、よろしくお願いします。

ki-aaa
質問者

補足

私のために、マクロを組んでくださり、ありがとうございます。 質問の仕方が悪かったのですが、数字ではなく、セルの枠そのものの色を変えたいのです。すみません。これ以外は、私が望んでいたものそのものです。 全選択の選択肢を無くし、個別選択の動作のみとし、他のマクロからサブとして呼び出して使用したいのですが できますでしょうか。 ありがとうございます。もう少し教えてください。

その他の回答 (6)

回答No.7

おはようございます。あなた様のマクロをチェックしてみました。問題なく動作すると思います。次の3こは削除した方がいいと思います。  ・Dim myCmd as Integer ・My Cmd = 1  ・Sub myColor の()の中のDim myCmd as Integer  あなた様の書かれたマクロは、どのセルを選択してもコマンドボタンを押すと、C9~AG30・AJ9~BN30のすべてのセルに条件に合った時色がつくという動作をします。 もし、あるセルを選択してコマンドボタンを押した時に選択したセルのみに色がつくという動作をさせたいのであれば、下記のように変更する必要があります。 Private Sub CommandButton1_Click() If CommandButton1.Caption <> "個別選択" Then CommandButton1.Caption = "個別選択" With CommandButton1.Font .Size = 14 .Bold = True End With End If Call Macro2 Select Case ActiveCell.Value Case Is = "" Case Is < -20 ActiveCell.Interior.Color = RGB(200, 100, 230) Case Is < -10 ActiveCell.Interior.Color = RGB(200, 200, 130) Case Is < 0 ActiveCell.Interior.Color = RGB(200, 200, 230) Case Is < 10.5 ActiveCell.Interior.Color = RGB(200, 200, 0) Case Is < 15.5 ActiveCell.Interior.Color = RGB(0, 200, 200) Case Is < 20 ActiveCell.Interior.ColorIndex = 43 Case Is < 25 ActiveCell.Interior.ColorIndex = 10 Case Is < 30 ActiveCell.Interior.ColorIndex = 5 Case Is < 35 ActiveCell.Interior.ColorIndex = 6 Case Is < 40 ActiveCell.Interior.ColorIndex = 7 Case Is < 100 ActiveCell.Interior.ColorIndex = 42 End Select End Sub 1日も早くマクロが完成できますことを陰ながら応援しております。

ki-aaa
質問者

お礼

何度も、詳しい返事ありがとうございます。 自分で、一からマクロを作ろうとするのは初めてでしたが、の難しいものですね。 どんな、コードを使っていいか、皆目見当がつきませんでした。 今回教えてくださった、マクロはいろいろ使えそうですので、大事にとっておきます。 また、違うマクロで聞きたいことがあるのですか、調べて判らなかったら質問を立てますのでよろしくお願いします。

回答No.6

こんばんは。早速あなた様のご質問にお答えしたいと思います。 >他のマクロからサブとして呼び出して使用したいのですが できますでしょうか。 できます。Call マクロ名というコードを1行加えることによってプロシージャーを呼び出して実行することができます。 前回、Call Sheet1.myColor(myCmd, myCell)というコードを使っていますが、まさにこれがそうです。このコードの意味は、「シート1にあるmyColorというプロシージャーを呼び出して実行せよ。」という意味なのです。 (myCmd, myCell)は、今回は無視して下さい。 >数字ではなく、セルの枠そのものの色を変えたいのです。 これは簡単に変更することができます。FontをInteriorと変えれば、セル全体に色が塗られます。 もし、サンプルマクロをご希望でしたら、次のことをお知らせ下さい。  ・呼び出し元のマクロでやらせたい内容。  ・呼び出し先のマクロでやらせたい内容。  ・データ入力は、シート1だけでよいのか。それともシート2・シート3・・・と入力することがあるのか。  ・呼び出し元のマクロと呼び出し先のマクロは同一ブック内でよいのか。 よろしくお願いいたします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

#3のものです。捕捉に書かれたことに対して (1)色が変わるセルの範囲が指定できて・・ これは割合簡単に出来そうです。 プロシージュアの最初に If Target.Column <> 1 Then Exit Sub End If をいれるとA列だけに出来ます。行はTarget.Rowで判断 します。 (2)数式でも、値の入力ができるといいのですが。 B7に12、C7に25をいれ、A7に=B7+C7をいれると、ブルーになりましたが。 (3)その他 本件はセルの値が変わるごとに、いわば「動的に」色づけ していますが、値・式をいれ終わり、計算を終わってからの値で色づけする、いわば「静的な」方法の方が良いかもしれない。 (4)エラーが出る問題 Changeイベントとからんでいると思うので、ある限定された場合に上手く行かないケースがあり、その手当て が出来ていないかもしれませんが、取りあえずの提供と言うことでよろしく。

ki-aaa
質問者

お礼

何度も、教えていただき、ありがとうございます。 >B7に12、C7に25をいれ、A7に=B7+C7をいれると、ブルーになりましたが バージョンの問題でしょうか、できませんでした。 >「静的な」方法 これをkazuhiko5681さんから教えてもらっています。 また質問を見かけたらよろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

>この後どうすればいいのかまったくわかりません。 コードが正しく入力されたら、Sheet1に戻って どのセルでも良いですから1から100までの数を 入力してENTER]キーを押してください。すると CHANGEイベントが自動発生し、本プログラムが走り ます。するとセル値に応じてセルに色がつきます。 >「'b行の2行、'cの2行は同一行にしてください。 」の部分が、わかりません。 ●OKWEBでは横1行の文字数に制約があり、強制的に改行されてしまいます。(スペース+ウンダースコアで改行も可能なんですがそのままにしています。) ●条件付書式をマクロの記録を取っていただければ、'aと'bの部分は正しい表記法で出てきます。 ●さて直接答えると、'aの2行のうち上の'aの'の前にカーソルを置いて、DELキーで削除し、(前部分略) ・・xlBetween,Formula・・・となるようにしてください。 'bの部分は、(全部分略) ・・FormatConditions(1).Interior.ColorIndex = ci となるようにしてください。

ki-aaa
質問者

補足

回答ありがとうございます。 うまくいきました。数字を打ち込んで色が出てくるなんて、ちょっと感動ものです。 遅くなりしたが、その訳は、変数の宣言を強制するにチェックが入っていたので、エラーか出たのと、:=xlBetween, _ 'a Formula1を :=xlBetween, Formula1にするのに、迷っていたからです。 それとたまにエラーが出ます。同じセルに何度も入力すると発生するみたいです。メッセージは以下のとおりです。 実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。 デバッグを選択すると、次の行が黄色で選択されてます。 Target.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, Formula1:=f, Formula2:=t あと、色が変わるセルの範囲が指定できて、それに、数式でも、値の入力ができるといいのですが。注文が多くてすいません。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

操作による書式-条件付き書式では3種しか設定できないようです。プラス標準の白色1種と4種ですね。 それで下記VBAを作ってみました。セル値により10種設定しています。 100まで10刻みなんですが、Case Is > 100等の100とf = "101": t = "1000": ci = 12の部分を適当な範囲に修正してください。 case文は大きい数から順に、上から設定してください。 色のColorIndex 以外のRGBでの指定方法は、本等を見てください。 Private Sub Worksheet_Change(ByVal Target 'c As Range) 'c Select Case Target Case Is > 100 f = "101": t = "1000": ci = 12 Case Is > 90 f = "91": t = "100": ci = 11 Case Is > 80 f = "81": t = "90": ci = 10 Case Is > 70 f = "71": t = "80": ci = 9 Case Is > 60 f = "61": t = "70": ci = 8 Case Is > 50 f = "51": t = "60": ci = 7 Case Is > 40 f = "41": t = "50": ci = 6 Case Is > 30 f = "31": t = "40": ci = 5 Case Is > 20 f = "21": t = "30": ci = 4 Case Is > 10 f = "11": t = "20": ci = 3 Case Else f = "1": t = "10": ci = 2 End Select '--------- Selection.FormatConditions.Delete Target.FormatConditions.Add 'a Type:=xlCellValue, Operator:=xlBetween, _ 'a Formula1:=f, Formula2:=t 'a Target.FormatConditions 'b(1).Interior.ColorIndex = ci 'b End Sub 上記'aの3行、'b行の2行、'cの2行は同一行にしてください。 (1)ALTキーを押しながらF11キー (2)Sheet1のChangeイベントプロシジュアとして上記を貼り付ける。

ki-aaa
質問者

補足

回答 ありがとうございます。 今、エクセルを開いて、ALTキーを押しながらF11キー を押し、 Sheet1(Sheet1)  Worksheet Change  となっています。 ここの Private Sub Worksheet_Change(ByVal Target As Range) End Sub をimogasiさんの物と入れ替えました。 Private Sub Worksheet_Change(ByVal Target As Range) 'c Select Case Target ・ ・ '--------- Selection.FormatConditions.Delete Target.FormatConditions.Add 'a Type:=xlCellValue, Operator:=xlBetween, _ 'a Formula1:=f, Formula2:=t 'a Target.FormatConditions 'b(1).Interior.ColorIndex = ci 'b End Sub >上記'aの3行、'b行の2行、'cの2行は同一行にしてください。 この説明の「'b行の2行、'cの2行は同一行にしてください。 」の部分が、わかりません。 それと、この後どうすればいいのかまったくわかりません。 すみませんです。よろしかったら、もっと詳しく教えてください。

回答No.1

はじめまして。あなた様のおやりになりたいことは、マクロを組めば簡単に実行できます。もし私でよろしければ、サンプルマクロを作ってみようかと思います。ご希望の節は次のことをお知らせ下さい。 1.色をつけたいセルの位置(例えば、A・C・Eと1行おきにとかA・D・G列のみとかと書いていただけると助かります。) 2.色の配色方法(例えば-100~-10まで緑・-10~10までは黄色というように書いていただけると助かります。) お手数をおかけいたします。よろしくお願い申し上げます。

ki-aaa
質問者

補足

返事、ありがとうございます。 私のマクロの程度は、操作をマクロとして記録して実行か、または記録されたマクロ中のセルのA1をB2に変えるくらいです。 >1.色をつけたいセルの位置 C9~AG30 AJ9~BN30 ・・・・(行 9~30、 列 31列かけ12個、間に二列の空白) >2.色の配色方法 -100濃い青-10青0薄い青10青緑15緑20黄緑25黄30橙35赤橙40赤100 色は最終決定ではありません、出来上がったものを見て、変えたいと思います。 マクロの実行は12個個別に実行か、すべて実行か両方あるとあると嬉しいです。 よろしくお願いします。

関連するQ&A

  • エクセルである数値を色分けする

    エクセルである数値の統計表を作成しています。 表全体の数値の中で例えば15~20という数値のセルだけ指定の色を付けたいのです。 条件付書式で設定すると複数の条件が重なった時には、指定通りに表示されません。また条件付書式で設定した場合、完成したその表に新たに別の表からコピーした数値を貼り付けると設定した条件が消えてしまいます。 私の作成したいのは、 条件1・表全体の数値から15~20という数値のセルを黄色。 条件2・C列の数値の中で35以上だけセルを赤色。 条件3・F列の数値の中で38~40だけセルを青色。 条件4・G列の数値の中で5以下のセルを緑色。 この場合条件2と条件3は数値が重なるので条件3を優先させることは無理でしょうか? 上記のような条件で表を作成できますか? もうひとつ、 指定の列の中に、ある条件の数値がある時、別の指定のセルに任意の文字を表示さたいのです。 例えばA列の数値の中に5~8の範囲の数字があれば、J30のセルに”あああ”という文字を表示させ、9~12の数値の場合は”いいい”と表示させ、13~18の時は”ううう”と表示させる。 このようなことは出来ますか? 作成方法を教えてください。 よろしくお願いします。

  • 記入した数値によってセルの色分け

    こんにちは。 エクセルで、セルにある値を入力したらセルの色が自動で変わるようにしたいです。例えば、50未満なら青、50以上なら赤という感じです。どうしてもマクロが必要であれば仕方ありませんが、それ以外の方法であればご教授ください。

  • Excelでセルの色づけを自動に行いたいです。

    Excelでセルの色づけを自動に行いたいです。 入力した数値と同じ数のセルに、自動で色をつける事は可能でしょうか? 例えば、A1のセルに「5」と入力すると、隣のセルB1~F1までの5つのセルが 塗りつぶされるというようなことをしたいと思っています。 条件付書式、またはVBAで方法があれば教えて下さい。

  • 記入した数値によってセルの色分けをしたいのです。

    記入した数値によってセルの色分けをしたいのです。 エクセル2007で、セルに入力した数値によって色分け出来るようにしたいのです。 図案等の配色を考える時に利用したいので、数値を変えると色が変わると嬉しいのですが出来るのでしょうか? 調べていたらcolorindexを使って出来そうなのですが、勉強不足でよくわかりません。 ご存じの方がいらしたら、よろしくお願いします。

  • Excel条件付書式/他のセルの条件での色分け

    こんにちは。よろしくお願いします。 条件付書式の設定で困っています。 Excel2010です。 A1セルに「△」を入力すると、 △が入った1行がすべてグレーになるように設定したしたく、 1行目のセルに 「セルの値」が「次の値に等しい」「=A1="△"」 として、あとは書式の色をグレーに設定してみたのですが、 A1に△を入れてみても一向に色が変わりません。 どのように設定すれば、他のセルで入力された条件に対して 色分けすることができるでしょうか? ちなみにA1セル自体に設定して、△を入力すると A1だけはグレーに変わりました。 初歩的な質問ですみません。ご指導ください!

  • EXCELのセル内で数値(値)の色を変更したい

    EXCEL2010を使用していますが、 あるセル内で最初から○番目から以降の入力数値の色を自動的に変更したいのですが何か方法はありますか?  例えばA1セルに数値を入力しますが、最初から3番目までの数値は黒、4番目からは赤という風に自動で変わるようにしたいのです(8番目からは青というふうにも出来るなら教えてほしいです)  条件付書式等ではセル全体で入力値の色が変わってしまいます また、今のセルに入力してある数値をいくつかのセルに分けて入力しようと思いましたが、 そのファイル自体がいろんなファイルと連動したシステムを構築してありますので不可能になっています お知恵をお借りできればと思いますのでよろしくお願いいたします 

  • ◇セルに任意の数値を入力した数値を条件付き書式に反映させる◇

    ◇セルに任意の数値を入力した数値を条件付き書式に反映させる◇ セルに任意の数値を入力した数値を条件付き書式に反映させ、状況に応じて 色付ける幅をかえたいと思います。 その都度、指定を変更すればいいのでしょうが、広範囲なのとマクロを組んでいるので セルに毎回違う数値を入れて条件付き書式を使用したいと思っております。 何かよい方法があれば教えて頂きたいです。 宜しくお願いします。

  • excel、A1セルとB1セルの差でセルに色を付けるには・・・・。

    皆さん始めまして、いつも大変お世話になっております。 excelでの質問です。 まずA1セルとB1セルに小数点2桁の数値を入力します。 A1セルからB1セルの数値を引き、その差が0.16以上の場合に条件付書式を使いA1セルとB1セルに色を付けたいのです。 当方条件付書式に 「数式が」=(A1-B1)>=0.16 上記の条件を入れてみたのですが、A1セルとB1セルに入れる数値によっては上手く色が付けられないで困っています。 参考値  A1「54.19」 B1「54.03」 上の数値だと色が付かなかったりします 他に良い方法ありましたら教えて頂けると幸いです、よろしくお願いいたします。

  • 条件付書式で空白セルを無視したい

    エクセルの条件付書式について質問です。 あるセルの値が80%以下の場合、セルに色を付けたいのですが、 未入力のセルは無視させるにはどうしたらいいですか? 「次の値よりも小さい」で「<80%」とすると、空白セルも色が変わってしまします。

  • Excelの条件付き書式で、数式と数値を区別する方法

    Excelの条件付き書式の使い方を教えてください。 ちょっとややこしめの表があって、数式や関数がちりばめられています。 この表は、毎月、数値を変えて使いたいのですが、 数値が入っているセルと、数式が入っているセルが混在していて、 どこに値を入力すればいいのか、いまいちつかみにくいのです。 数値のセルだけ色をつけ、入力するところのみを際立たせたいのですが、 条件付き書式でできないでしょうか? よろしくお願いします。

専門家に質問してみよう