条件以下のセルに色を塗る − GoGoマクロ

HOME > レッスン > セルに色を塗る

条件以下のセルに色を塗る

条件以下のセルに色を塗る


pickup
Excelの悩み マクロでスッキリ!
『自宅でマクロがマスターできる本格CD教材』
   =現役ベテランSE監修=


今回は「条件以下(エラーデータ)のセルに色を塗る方法」と題しまして、 マクロでこれを自動処理する為の基本をご紹介します。

普段から、数千行、数万行(はたまた数十万行)といった大量のデータを扱ってる という方も多いかと思いますが、そのデータの中には必ずと言っていいほど想定外といいますか、 条件外のデータ(エラーやいわゆるイレギュラーのデータ)というものが存在する場合も多いことと思います。

その条件外データというものは、例えば、数万件のデータ中に数個あったり、 数十個、数百個ある場合もあろうかと思いますが、 大量のデータの中からそれら条件外データを捜し出すのは大変な手間の掛かる作業だと思いますので 日々そのようなデータと格闘して苦労しているという方も多いのではないでしょうか。

そこで、今回はそうした条件外データに対処する方法、そのためのマクロ作りを勉強していきます。

で、エラー(条件外のデータ)と一言でいっても色々なケースがありますし、その対処方法も実に 様々なわけですが、
今連載での最終的な目標は、エラーデータを自動修復しそのエラーデータの修復 一覧表(修復前と後のデータ)を別表に出力する。というところまでを目標にやっていくことにします。


当然ですが、エラーデータか?エラーデータでないか?その条件や判断基準も 実に様々です。

例えば、

・必ずゼロ以上(正の整数)になるはずデータが負の数字になっていたり、
・数字データであるはずの項目に文字データが入っていたり、
・健康診断の一覧データに身長が 15m もあることになっている社員が存在していたり、
・取引データの日付が1805年1月1日みたいな有り得ない日ひにちになっていたり、

だったりします。

これ、ちょっと知ったエクセルユーザーなら、セルの関数や入力規則(メニ ューの [データ(D)]→[入力規則(L)] )でと考える方もいるかも知れません が、既にサーバー等からエクセルのシート上に落としたデータに入力規則は 適用しませんし、大量のデータにいちいち関数を組み込んでいったら大変な シートができてしまうと思いますので、

そこは地道に、検索、置換、オートフィル、ピボットテーブル、・・・etc Excelの既存機能を駆使して面倒な手作業でやっているというケースが多い だろうと思います。

そこでまず手始めに、今回はエラーデータを捜し出して、そこに目印の色を 塗るというマクロを作るところからやっていきます。



1)
ではまずはじめに、いつものようにマクロの記録を使ってその基となる プログラム作りから始めます。
――――――――――――――――――――――――――――+
1.エクセルを起動させます。(空のエクセルを立ち上げてください)

2.まず、マクロの記録を開始します。
 [開発]タブの[コード]で [マクロの記録] をクリック →
「マクロの記録」画面が出るので、そのまま[OK]をクリック。

3.次に、B2のセルを選択し、とりあえず 123 と打ってください。
 打ち終わったら一度[Enter]キーを押して入力モードを解除して、

4.そうしたらもう一度、B2のセルを選択し、このセルを黄色く
 塗りつぶしてください。([ホーム]タブの[フォント]で
 [塗りつぶしの色(黄)]にて)

5.最後に、[開発]タブの[コード]で [■記録終了] をクリックして、
 マクロの記録を終了させます。
――――――――――――――――――――――――――――+



2)
では、いま作ったプログラムの中身をのぞいてみます。
――――――――――――――――――――――――――――+
1.まず、いつもの様にプログラムの画面を表示します。
 [開発]タブの[コード]で [Visual Basic]をクリック。

2.この画面の左上半分の[+標準モジュール]という所の+の部分を
 クリックすると、そのすぐ下に[Module1]と表示されるので、その
 [Module1]をダブルクリックします。
――――――――――――――――――――――――――――+

++++++++++++++++++++++++++++―
Sub Macro1()
'
  Range("B2").Select
  ActiveCell.FormulaR1C1 = "123"
  Range("B2").Select
  With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
  End With
End Sub
++++++++++++++++++++++++++++―

(注)コメント行(うす緑色になってる部分)は省略しています。
(注)Excel2007バージョン以降ではトゥルーカラーというものが採用され上記のColorIndexの数字の部分(カラー番号)が大きな数字になっているなどの違いがあると思いますが、それら(With 〜 End With までの下記の部分)の違いは気にしなくて大丈夫です。

  Excel2007以降の場合
  +++++++++++++++++++++―
  With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
  End With
  +++++++++++++++++++++―

これは、いつものようにこれから作るプログラムのがらを作るために、まず 処理対象とするセルに印をつけたという状態のマクロです。



3)
それでは早速、このプログラムにちょっと手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、
  ActiveCell.FormulaR1C1 = "123"
 と書いてある行を
   a = ActiveCell.Value
 と書き改めてください。

2.次に、その下の
  Range("B2").Select
 という1行を下記のIF文に修正してください。
   If a < 100 Then

 ※今回プログラム中にこの Range("B2").Select という行は
  2ヶ所ありますので、ここの修正はその内の下の方だけです。
 (上の方を修正しないよう、ご注意ください。)

3.最後に、プログラム最後の行
   End Sub
 のすぐ上に、下記の1行を追加します。
   End If

 (いつものように、For文 〜 Next i までの間の4行はTABキー
  にて字下げをして(見やすくして)おいてください。)
――――――――――――――――――――――――――――+

修正した後のプログラムは下記の様になります。

++++++++++++++++++++++++++++―
Sub Macro1()
'
  Range("B2").Select
  a = ActiveCell.Value
  If a < 100 Then
    With Selection.Interior
      .ColorIndex = 6
      .Pattern = xlSolid
    End With
  End If
End Sub
++++++++++++++++++++++++++++―

いま行った修正は、ある条件が当てはまる場合にセルに色を塗るというもの です。(この場合、ある条件というのは100より小さい場合で、この時塗る色 は黄色だということになります。)



4)
それでは、実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、まだ何も書かかれていない空のシート
 [Sheet2]を開いてください。

(※Excel2013をお使いの方は、下方の[新しいシート] +ボタンを
 押して新たに[Sheet2]を作成してください。)

2.次に、その[Sheet2]のB2のセルに 200 という数字を入力して
 ください。

3.では、実行します。
 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るのでそのまま[実行]をクリック。

4.ではもう一度、今度は同じB2のセルを 50 という数字に打ち直して
 ください。

5.では、再び実行します。
 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るのでそのまま[実行]をクリック。
――――――――――――――――――――――――――――+

1回目は何も起こらず、2回目の実行ではB2のセルが黄色く塗つぶされればOK ということになります。(これは単純に、1回目の実行データの 200 は条件の 100より大きく、2回目の 50 は100より小さいため(IF分の条件に合ったから) の結果です。)



5)
それでは、もう少しこのプログラムを修正していきます。
――――――――――――――――――――――――――――+
1.プログラムの画面に戻って、まず、プログラム先頭の
   Range("B2").Select
 という行の上に、下記の2行を追加します。
   n = Cells(Rows.Count, "B").End(xlUp).Row
   For i = 2 To n

2.続けて、プログラム最後
   End Sub
 という行の上に、下記の1行を追加します。
   Next i

(そうしたら、ここもいつものようにいま追加したループの中
 For文 〜 Next i までの間の8行をTabキーを使って字下げを
 行っておいてください。)

3.最後に、
Range("B2").Select
 という行を、下記に修正します。
Range("B" & i).Select
――――――――――――――――――――――――――――+

修正した後のプログラムはつぎの様になります。

++++++++++++++++++++++++++++―
Sub Macro1()
'
  n = Cells(Rows.Count, "B").End(xlUp).Row
  For i = 2 To n
    Range("B" & i).Select
    a = ActiveCell.Value
    If a < 100 Then
      With Selection.Interior
        .ColorIndex = 6
        .Pattern = xlSolid
      End With
    End If
  Next i
End Sub
++++++++++++++++++++++++++++―

この辺の修正の仕方は何度もやっていますので、もうみなさんお馴染みかとは 思いますが、要するに、

ループをかぶせたらその For 〜 Next の間で固定になっている数字の部分を

Range("B2").Select → Range("B" & i).Select

のように修正して、ループ変数( i とか j とか)に変えておくという、当講座 お決まりのパターンです。(ぜひこのワンパターン覚えておいてください。)



6)
それでは、実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、まだ何も書かかれていない空のシート
 [Sheet3]を開いてください。

(※Excel2013をお使いの方は、下方の[新しいシート] +ボタンを
 押して新たに[Sheet3]を作成してください。)

2.まず、実行する前にテストデータの準備をします。
 以下のテキスト(計11行)をコピーして、セルA1の位置に
 そのまま貼り付けてください。

氏名
Aさん
Bさん
Cさん
Dさん
Eさん
Fさん
Gさん
Hさん
Iさん
Jさん

3.同様に、以下のテキスト(計11行)をコピーして、セルB1の位置に
 そのまま貼り付けてください。

身長
156
180
177
165
171
18
149
172
-56
159

4.では、実行します。
 [開発]タブの[コード]で [マクロ] をクリック → 「マクロ」
 画面が出るのでそのまま[実行]をクリック。
――――――――――――――――――――――――――――+

実行した結果、7行目のFさんと10行目のIさんの身長データのセルが黄色く 塗つぶされればOKということになります。

これは、世の中に身長が18センチの人やマイナスの人はいないので、そのよう な有り得ないデータ(エラーデータ)を今回作ったマクロで見つけ出して目印 の色を塗ったという結果です。


今回はこれで終了です。

今日作ったマクロプログラムは次回もこの続きでまた使いますので、大切に 保管しておいてください。 (ファイルの種類: Excelマクロ有効ブック 、ファイル名:gogo159.xlsm )




マクロ初心者(入門者)の皆さんへ

こんにちは、「Go!Go! エクセルマクロをはじめよう!」筆者の三太郎です。
私はこの道25年、現役バリバリのベテランSE(システムエンジニア)をしています。 なので、業界にどっぷり染まってしまった IT業界人 です。(笑)

マクロ(エクセルのプログラミング)がどれだけ便利なものなのか・・・ ということは、 皆さんもうよくお分かりいただけてる(!?)ものと思いますが、でも 「やっぱ、中々取っつき難い、ハードルが高い、素人には難しい。」 そう感じている方も多いかと思います。

エクセルをほぼ1日中使ってる人が多い職場であっても、マクロを使える人はほとんど居ません。 (30人の職場で精々1人か2人居ればいいほうかと思います。。) 私は、そのような現状(PC仕事の非効率)を改善して、日本にもっと効率良いIT化の機運を 高めて行きたい!そう願って、今から十数年前にこのようなメルマガ講座を始めました。

マクロを始める為の条件は、エクセル上級者ではありません! 頻繁にエクセルを使ってる人、 ただそれだけです。エクセルの操作レベルはまったく関係がありませんので、 エクセルユーザーの全ての皆さんが当メルマガ講座の参加対象者です。

パソコン仕事で この上なく便利なエクセルのマクロ というものを、もっと多くの人に知って欲しい、使って貰いたい。その想いだけで、長年メルマガの 無料配信を続けてきました。今では、この分野では異例とも言える1万人を超える大勢の皆さんに ご登録いただいているメルマガ講座に成長いたしました。 読者の皆さんからのご声援のお陰です。本当、ありがとうございます。

当メルマガ講座では、簡単に出来るマクロ作成法のコツとその手順を教えています。 とにかく作って、動かす。だから楽しくなってきます。 VBAのカタカナ用語や難しい仕組みの理解、構文暗記といった従来型の不必要な勉強は一切しません! なぜなら、エクセル作業の自動化にその必要は一切ないからです。 初心者がすぐに挫折するカタカナ用語羅列のマクロ勉強なんて、殆どの人には役に立ちません!

マクロとは、エクセルの作業を自動化する為の道具に過ぎません! マクロを組む為に難しいプログラムの仕組みや わけのわからないカタカナ専門用語を覚える必要など毛頭ないわけです。 私はこれまで十数年間、大勢の読者に教えてきて、Excel自動化に成功した沢山の人を生み出してきた 経験で、そう断言します! (本屋に並ぶVBA参考書のライターレベルの人の言うことを真に受けて、 あなたに必要のない”勉強の為の勉強”をしてしまわぬよう、 くれぐれもご注意ください。)

ここでは、「これからマクロを始めてみようかな?」と思ってる方や、 すでにどこかで勉強して「すぐに挫折してしまった・・(>_<)」という方に、 安心して勉強のできる方法とその実習環境とが用意されています。 もし、あなたが過去に挫折した経験者であれば、きっと私が常々言っている 勉強すべき事とすべきでない事 その違い(ここの初心者学習環境の素晴らしさ・・)というものがすぐに分かっていただけるだろうと思います。

マクロ(VBA)というのは多義に渡ります。アマチュアのサンデープログラマーから ベテランの上級者やプロに至るまで、実に幅が広いものです。 初学者には到底 必要のない 難しい部分まで勉強してしまうから当然、 必ずずぐに挫折する事になります。

残念ながら、「まだピカピカの小学一年生(初心者)に、いきなり掛け算や割り算はおろか、 三角関数や微分積分までも教えてしまうような痛ましい光景」を、ネットでも参考書でもセミナーでも、 VBAの世界ではたくさん目にします。

だから、「何を勉強するか」ではなく「何を勉強しないか」 初心者にはその正しい選択が重要なんです。勉強の範囲を 初心者の領域(Excel業務の効率化)だけに絞ってやりさえすれば 、さほど難しく考える必要はありません。それで、難しく、さっぱりちんぷんかんぷんだと思っていたマクロが 楽しく、 どんどん楽しく、勉強できるようになります。

→ エクセルマクロを10分で理解する!(YouTube動画)


あなたもこの三太郎式マクロ勉強法で、面倒なExcel仕事の自動化を ぜひ、この他にはない画期的な方法で実現してください。あなたの 参加を(下記無料メルマガへのご登録を)お待ちしてます!! (少々、力説し過ぎて話長くなりました。すみません。m(__)m)



 
最新号 は、下記にアドレス登録すると無料配信されます。

▼マクロ講座の登録はこちら((無料)) まぐまぐ
Go!Go! エクセルマクロをはじめよう! (マガジンID:0000135169)   
メルマガ登録
  メールアドレス: