- ベストアンサー
エクセルで、入力された数値でセルの色を変えたいのですが!
入力された数値の大きさにより、セルの色(パターン)を10段階に変化させたいのですが、当方VBEの知識がほとんどありません。 どなたか助けてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>Sheet1のセルA2~T2には、あるソフトにより常時変化する数値が >入力され続けます。 そのソフトの仕様によって、どのような手段がとれるかが決まると思います。 妙にExcel側でマクロを組み込むと元のソフトとの連携に障害を及ぼすおそれがあります。 ソフトの開発元に相談される方がよろしいかと思います。 他のソフトとの連携でデータが入力されているような場合、VBAには詳しくないと自認されている状態なら、やめておいた方が無難です。 それでもやってみたいということなら、以下に一応サンプルとして示してみますが、元データの入力仕様がわからないので、正常動作の自信なしです。 Sheet2でのデータの表示位置は、Sheet1と同じとします。その場合、Sheet2のA2に =Sheet1!A2 と入力し、T2までコピーします。 ツール=>マクロ=>Visual Basic EditorでVBEの画面を出し、プロジェクトウィンドウで、Sheet2をダブルクリックし、以下のコードを貼り付けます。 Private Sub Worksheet_Calculate() Call chgclr End Sub VBEの画面のまま、挿入=>標準モジュールで、以下のコードを貼り付けます。 Sub chgclr() Dim MyRng As Range, WkCls As Range Set WkCls = Sheets("Sheet2").Range("A2:T2") For Each MyRng In WkCls Select Case MyRng.Value Case 1 To 100 MyRng.Interior.ColorIndex = 22 Case 101 To 200 MyRng.Interior.ColorIndex = 3 Case 201 To 300 MyRng.Interior.ColorIndex = 4 Case 301 To 400 MyRng.Interior.ColorIndex = 5 Case 401 To 500 MyRng.Interior.ColorIndex = 6 Case 501 To 600 MyRng.Interior.ColorIndex = 15 Case 601 To 700 MyRng.Interior.ColorIndex = 31 Case 701 To 800 MyRng.Interior.ColorIndex = 32 Case 801 To 900 MyRng.Interior.ColorIndex = 33 Case 901 To 1000 MyRng.Interior.ColorIndex = 34 Case Else MyRng.Interior.ColorIndex = 35 End Select Next MyRng End Sub
その他の回答 (3)
- ryoppemag
- ベストアンサー率15% (15/96)
例えば、A1を黒にしたい場合以下のようになります Range("A1").Select With Selection.Interior .ColorIndex = 1 End With A列の上から順番に数値を読み取って(FOR文とかで) IFかSELECTで分岐させればよいと思います。 サンプル Sub color() Dim i As Integer Dim val_s As String Dim val_i As Integer Application.ScreenUpdating = False For i = 1 To 10 Range("A" & CStr(i)).Select val_s = Selection.Value If IsNumeric(val_s) = True Then val_i = CInt(val_s) If val_s < 10 Then With Selection.Interior .ColorIndex = 20 End With ElseIf val_s < 20 Then With Selection.Interior .ColorIndex = 3 End With ElseIf val_s < 30 Then With Selection.Interior .ColorIndex = 4 End With ElseIf val_s < 40 Then With Selection.Interior .ColorIndex = 5 End With ElseIf val_s < 50 Then With Selection.Interior .ColorIndex = 6 End With ElseIf val_s < 60 Then With Selection.Interior .ColorIndex = 7 End With ElseIf val_s < 70 Then With Selection.Interior .ColorIndex = 8 End With ElseIf val_s < 80 Then With Selection.Interior .ColorIndex = 9 End With ElseIf val_s < 90 Then With Selection.Interior .ColorIndex = 10 End With Else With Selection.Interior .ColorIndex = 11 End With End If End If Next Application.ScreenUpdating = False End Sub ※一応動作確認はしましたが、バグとかあるかもしれないのでそのままは使わないほうが良いかと エラー処理も入れてないし あくまで簡単なサンプルです!
お礼
どうもありがとうございます。 チャレンジしてみます。
もう少し条件を具体的に書いてもらわないと回答しづらいです。 A列に入力された数値によって、セルの塗りつぶしの色を変化させるサンプルです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range For Each myRng In Target If myRng.Column = 1 Then 'どの列のデータを対象にするかを指定。この場合A列。 Select Case myRng.Value Case 1 To 50 myRng.Interior.ColorIndex = 22 Case 51 To 100 myRng.Interior.ColorIndex = 3 Case 101 To 150 myRng.Interior.ColorIndex = 4 Case 151 To 200 myRng.Interior.ColorIndex = 5 Case 201 To 250 myRng.Interior.ColorIndex = 6 Case 251 To 300 myRng.Interior.ColorIndex = 15 Case Else myRng.Interior.ColorIndex = xlColorIndexNone End Select End If Next myRng End Sub ツール=>マクロ=>Visual Basic EditorでVBEの画面を出し、プロジェクトウィンドウで、対象のワークシートをダブルクリック、上記コードを貼り付けます。ワークシートが変更されると上記のマクロが実行されます。 とりあえず6段階の数値にしか対応していませんが、10段階も同じようにすれば、できるでしょう。 ただ、どんなデータを前提にしているのかが全く分からないので、Select Case文が最適かどうかは分かりません。 また、Worksheet_Changeは、使い方によっては、悲惨なことになりますので、十分な注意が必要です。
補足
ご回答ありがとうございます。 具体的な内容は、次のようになります。 Sheet1のセルA2~T2には、あるソフトにより常時変化する数値が入力され続けます。 その数値の変化を、より視覚的にわかりやすく表現するため、Sheet2にその数値を配置すると共に、数値の大きさにより100刻みに100以下~1000以上まで10段階にセルの色を変化させるようにしたいのです。
VBAの知識が無くてもセルの条件書式の設定で出来るとおもいます。 書式メニューの中に条件書式があります。 これでもご希望に添えなかったら済みません。
補足
早速のご回答どうもありがとうございます。 条件付書式の設定は、3項目までとなっております。 10段階の色設定をすることは出来ません。 何か他にもアイディアがございましたら、お教え下さい。
お礼
早速試してみました。 バッチリです。 どうもありがとうございました。