• ベストアンサー

Excelのマクロでセル内の数値によってセルの色分け

はじめまして。マクロ初心者です。 よろしくお願いいたします。 エクセルに入力されている数値によってセルを色分けしたいのです。 数値はこんなふうに入力されています↓ A0*22*33*44              B1*22*33*44 A2*12*55*66               D1*77*22*88              C1*12*55*66               E2*99*12*11  こういったものが全部で1500行ほどです。 *は空白を表しています。 この中の、空白を入れて左から4つめの数字が2、5つめが2のときは赤、 左から4つめの数字が1、5つめの数字が2のときは青、 それ以外のときはそのまま… といった具合に全部で5種類5色に色分けしたいのですが、どうにも能力が足りなくて困っています。 最初、自分なりにネット等参考にしながら「22という数値を含むセルは赤」といったように作ったのですが、 どうしても左から4文字目5文字目に限定しないと余計なセルにも色が付いてしまうのです。 もう2日も悩んでいますが、どうにも手も足も出ません。 ご指導いただけると本当に助かります。 どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >こういったものが全部で1500行ほどです。 >*は空白を表しています。 間の空白が、半角であり、空白は1つであるという確約はないと思うのですね。 1500行で、数多くある場合は、そういうことを想定しないといけないような気がします。 私のコードの考え方は、空白で仕切られた4つの塊の文字列の2番目が、何であるかを検索しています。 確実に、その場所にあるというなら、 For Each c In rng で、 If Mid(c.Value, 4, 2) = 22 Then とすればよいです。 なお、色は、塗りつぶすなら、Interior の場合は、パステルカラー。Font なら、原色がよいです。 ----------------------------------------------- 'Case のところに、数値と色を加えてください。 Sub TestMacro1()   Dim rng As Range   Dim c As Range   Dim buf As Variant      Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)   Application.ScreenUpdating = False   rng.Interior.ColorIndex = xlNone   For Each c In rng.Cells     '全角スペースを半角にする     buf = Replace(Trim(c.Value), Space(1), Space(1), , , 1)     'スペースが2個以上入ったものをひとつにする     Do While InStr(1, buf, Space(2), 1) > 0      buf = Replace(buf, Space(2), Space(1), , , vbTextCompare)     Loop     If UBound(Split(buf, Space(1))) > 0 Then       buf = Split(buf, Space(1))       '数値を探す(ここに入れる)       Select Case Val(buf(1))         Case 22: c.Interior.ColorIndex = 3 '赤(3), ローズ(38)-パステルカラー         Case 12: c.Interior.ColorIndex = 5 '青(5), 水色(34)-パステルカラー       End Select     End If     buf = Empty   Next c   Application.ScreenUpdating = True End Sub

hinacohime
質問者

お礼

はじめまして。 ありがとうございます! びっくりしました。すごいです。 空白が一つとは限らないですよね、確かに。 全角を半角にしたり、空白が二つ以上のときにひとつにしたり、 きめ細かい内容で本当に感謝します。 パステルカラーの件も、確かにおっしゃる通りです。 見る人への思いやりですね。 内容はまだまだ初心者の私には、見ても理解できないところがあるのですが、本を見ながら一つずつ理解してみます。 本当に助かりました。 どうもありがとうございました。

その他の回答 (2)

回答No.2

こんなのではどうでしょうか? データがあるのがSheet1だった場合です。 Sub sample() Dim target As Range Dim r As Range Set target = Sheets("Sheet1").UsedRange For Each r In target If r <> "" Then 'とりあえず、色=自動の戻す r.Font.ColorIndex = xlAutomatic '空白を入れて左から4つめの数字が2、5つめが2のときは赤 If (Mid(r, 4, 1) = "2") And (Mid(r, 5, 1) = "2") Then r.Font.ColorIndex = 3 End If '左から4つめの数字が1、5つめの数字が2のときは青 If (Mid(r, 4, 1) = "1") And (Mid(r, 5, 1) = "2") Then r.Font.ColorIndex = 5 End If '必要に応じて条件を追加 End If Next End Sub

hinacohime
質問者

お礼

はじめまして。 ありがとうございます。 こうして書くのですね!! 本当に勉強になります。 これだと、4~5文字目のひとつが変わったときでも 簡単に変えられるのですね。 ありがとうございました。

回答No.1

1)現在作っているコードを貼り付けてもらえると、回答しやすいです。 2)質問文だけでは、5つの条件そのものがわからないので、5種類の条件をすべて教えてください。その際に5つの条件の優先順位も教えて下さい。

hinacohime
質問者

補足

はじめまして。 1)現在作っているコード↓ Sub Color() Dim c For Each c In Range("A1:E1500") If InStr(c.Value,"12") > 0 Then c.Interior.ColorIndex = 3 End If Next c End sub こんな感じです。 本当に初心者なので、たどたどしいです。 2)5つの条件:すべて同じです。4~5文字目に限定するということ、 順番は特に関係なく、ただただ色分けができればいいというものです。 色も指示されていません。 4~5文字目は、12,22,30,44,60です。   

関連するQ&A

  • Excelでセルの色分け

    Excel 2004 Macで、ある条件ごとに自動的にセルの色分けをする方法を教えてください。 たとえば、「共通教育」の文字が入っているセルは赤色に、「専門」の文字が入っているセルは青色に、という風にです。 お願いします。

  • EXCEL セルの色分け方法を教えてください

     1年間の毎日の気温(平均値、最高、最低)を平年値(既知)と比べて、高ければ『赤』、低ければ『青』にセルの色分けをしたいのですが、気温の数値をセルに入力すれば自動的に色分けされる方法を教えてください。  また、1か月ごとの『赤色セル』と『青色セル』のそれぞれの各気温ごとの個数をカウントして別のセルに表示させる方法も合わせて教えてください。  EXCELの表は以下のように作っております。      平年値                2013年1月 平均気温  最高  最低      平均値  最高  最低    4.3    9.0   0.2   1日   1.9    6.7    -3.0    4.2    8.9   0.1   2日   5.1   10.5    0.6

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

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

  • セル内の数値の色を変えたい!

    変動する数値に対して、範囲外の数値の色を変えたいのですが何度やってもうまくいきません(T_T) 例えば、【A1】のセルに500、【A2】に480という数値を入力した際、青文字にしたいのです。500から前後14以上の範囲で赤と青にしたいとき、条件付き書式の数式を知りたいです。 どなたか教えてください。

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

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

  • マクロを使って文字が入力されたセル数を数える

    マクロを用いて、文字が入力されたセル数をカウントしたいと考えていますがうまくいかず悩んでおります... 具体的には、セルB1からB1000にデータが入力された場合、左隣のA列に1から番号を付したいと考えています. B列が空白のままの行は、A列も空白にしておきたいです. (セルB1からB1000まで全てにデータが入力された場合、A1からA1000には1から1000までの番号が入る) また、A列に付された番号を判断し、100番毎にA列からE列までセル背景を色分けしていきたいと考えています. (B列が空白ならxlNoneでその行は無色のままにしたい) セル背景の色分けだけであればうまくいったのですが、B列の入力状況により自動でA列に番号(数字)を変化させたら思い通りに動かず困っています. ご教示、宜しくお願いします.

  • VBAで色分け

    エクセルで、A1からJ10までの10×10のセルを用意します。 その中に1~10までの数値を適当に入れ、それらを1なら赤、2なら青・・・というふうに色分けする方法を教えてください。よろしくお願いします。

  • エクセルでの計算結果値を色分けする

    たとえば、A/Bの値が100%以下の場合はその値を赤色の文字にし、100%以上の場合は、その値を青色にする。というような計算結果の数字を色分けすることはできるのでしょうか?(セルの書式設定にマイナス時に赤にするというのがありましたが) 使用エクセルは2003です。

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

    エクセルである数値の統計表を作成しています。 表全体の数値の中で例えば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の時は”ううう”と表示させる。 このようなことは出来ますか? 作成方法を教えてください。 よろしくお願いします。

  • エクセル セルのカラー設定について

    入力した文字に対して自動でカラーを変更できますでしょうか あれば、マクロでも構いませんので教えて頂けますでしょうか。 例えば A1にセルFOR MENと入力した際 自動的にA1のセルの背景が青になり A2のセルの文字が青になる また A1にセルFOR WOMENと入力した際 自動的にA1のセルの背景が赤になり A2のセルの文字が赤になる ようにしたいのですが 宜しくお願いします。

専門家に質問してみよう