GoGoマクロのブログ

初心者向けマクロ講座「Go!Go!マクロ」の筆者三太郎の公式ブログです。

シート全体を検索して着色するマクロの作り方(3)

2008-06-18 09:58:56 | マクロ作成のコツ
テーマ:シートを検索して着色するマクロ(その3)


◆リクエスト紹介

今回は、前回のシリーズ「文字列を検索するマクロ」に関連していただいた
下記のリクエストをご紹介しています。


投稿者:YSさん

 >今回の文字列検索マクロ面白いです。
 >続きで、シート全体に検索をして、
 >対象になったセルの全てに着色が
 >したいのですが、可能ですか。


YSさん、リクエストありがとうございます。



◆今日の講座


今回のリクエストのポイントは、検索結果に色を付けるということと、シート
全体を検索するということの2つであることは最初にもいいましたが、前回ま
でにこのうちの「検索結果に色を付ける」というところまで完成しましたので
今回は、もう一つの「シート全体を検索する」という方をやっていくことにし
ます。


それでは、前回作成したエクセルマクロ"gogo97.xls"をご用意ください。


1)
まずはじめに、プログラムの中身の確認です。
――――――――――――――――――――――――――――+
1."gogo97.xls"を開きます。(セキュリティ確認画面が表示された
 場合には、[マクロを有効にする]を選んでください。)

2.マクロプログラムを表示します。
 [ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]

3.この画面の左上半分の[-標準モジュール]という所の下の
 [Module1]をダブルクリックします。
――――――――――――――――――――――――――――+


++++++++++++++++++++++++++++―
Sub Macro1()
'
  Call Macro4
  b = InputBox("検索したい商品名を入力してください。")
  n = Cells(Rows.Count, "B").End(xlUp).Row
  For i = 1 To n
    Range("B" & i).Select
    a = ActiveCell.Value
    If a Like "*" & b & "*" Then
      Call Macro2
    End If
  Next i
  Range("E2").Select
End Sub
++++++++++++++++++++++++++++―

これは、前回までに作成した「検索結果に色を付ける」というマクロプログラ
ムです。

Call Macro2 で実際にセルに色を塗っています。
また、最初の Call Macro4 では、前回塗った色が残らないよう、全てのセル
の色をクリアーしています。


この段階ではまだB列についてのみ検索を行なうマクロとなっているわけです
が、今回これをシート全体へと広げていくことにします。

ここで、いま一度繰り返し処理(ループ)についてのおさらいですが、
前回のように1列のみが検索対象のプログラムでは、ループ( For~Next )は
1つで済みますが、これを複数の列を検索対象とする場合、ループが2つの2
重ループ(すなわち、ループの中にもう一つのループが入るプログラム)に
していく必要があります。

この2重ループに関しては前にも勉強しましたが、

++++++++++++++++++++++++++++―
  For i = 1 To 10
    ある処理
  Next i
++++++++++++++++++++++++++++―

上記は、「ループの基本形」ということで、この講座ではもう再三勉強してき
ていますのでみなさんもうよくお分かりの所とは思いますが、これは言い換え
るならば”1重ループ”ともいえます。
なので、今回用いる”2重ループ”というものは、

++++++++++++++++++++++++++++―
  For j = 1 To 10
    データ設定
    For i = 1 To 10
      ある処理
    Next i
  Next j
++++++++++++++++++++++++++++―

このような形になります。
本講座では、これを「2重ループの基本形」と定めています。



2)
それでは、これを踏まえてプログラムに少し手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、プログラム上方の
n = Cells(Rows.Count, j).End(xlUp).Row
 という行の上に下記の1行に追加してください。
  For j = 1 To 256

2.次に、プログラム下方の
Next i
 という行の下に下記の1行に追加してください。
  Next j
――――――――――――――――――――――――――――+

修正した後のプログラムはつぎの様になります。(ループの中の行は[Tab]キー
を使って、なるべく下記のように見やすく字下げを行なってください。)

++++++++++++++++++++++++++++―
Sub Macro1()
'
  Call Macro4
  b = InputBox("検索したい商品名を入力してください。")
  For j = 1 To 256
    n = Cells(Rows.Count, "B").End(xlUp).Row
    For i = 1 To n
      Range("B" & i).Select
      a = ActiveCell.Value
      If a Like "*" & b & "*" Then
        Call Macro2
      End If
    Next i
  Next j
  Range("E2").Select
End Sub
++++++++++++++++++++++++++++―

これで、プログラムの構造が2重ループになりました。
すなわち、縦×横(行×列)の両方向に向かって検索をしていくというプログラ
ムに拡張できたわけです。

ここで、ループ文 For j = 1 To 256 の256という数字はエクセル(Excel2007
以外)での最大の列数を表しています。
(まぁ、検索対象とするデータの列数というものは行数とは違ってあまり変動
するケースは少ないと思いますので、その都度データの列数に合わせてやれば
よいと思いますが、とりあえずここでは最大の256にしておきます。)


ただし、これではまだB列に対してのみしか検索はできませんので、もう少し
修正を加える必要があります。(プログラムの中に "B" という記述が残って
いるので。)



3)
それでは、このプログラムにもう少し手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、プログラム上方の
n = Cells(Rows.Count, "B").End(xlUp).Row
 という行を、以下に修正します。
  n = Cells(Rows.Count, j).End(xlUp).Row
 ( "B" → j に変えるだけです。)

2.次に、プログラム中段の
Range("B" & i).Select
 という行を、以下に修正します。
  Cells(i, j).Select
――――――――――――――――――――――――――――+


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


++++++++++++++++++++++++++++―
Sub Macro1()
'
  Call Macro4
  b = InputBox("検索したい商品名を入力してください。")
  For j = 1 To 256
    n = Cells(Rows.Count, j).End(xlUp).Row
    For i = 1 To n
      Cells(i, j).Select
      a = ActiveCell.Value
      If a Like "*" & b & "*" Then
        Call Macro2
      End If
    Next i
  Next j
  Range("E2").Select
End Sub
++++++++++++++++++++++++++++―

ここで出てきた Cells(i, j) というものを使うことで、i行j列(iとjは数字)
のセルをセレクト(選択)することができます。

例)
Cells(5, 3).Select・・・3番目の列の5行目のセル(すなわちC5のセル)を
             選択するという意味。



4)
それでは、確認のため実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、新しく空のシート[Sheet7]を作成してください。
 [挿入(I)] → [ワークシート(W)]

2.次に、テスト用のデータを入力します。
 以下のテキスト(5行)をコピーして、[Sheet7]のセルA1の位置に
 そのまま貼り付けてください。

ボールペン
ノート
シャーペン
消しゴム
ボールペン赤


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

ノートA4
3色ボールペン
4色ボールペン
修正液
シャーペン0.5mm


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

ボールペン黒
ノートA5
シャーペン0.3mm
消しゴム
ボールペン青


5.では、実行します。
 [ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
 そのまま[実行]をクリック。

6.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
 その入力窓に以下の日本語(2文字)

ペン

 と入力してください。

7.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+


実行した結果、各列のペンという文字を含むデータのセルが黄色く塗りつぶさ
れていればOKです。

これで、複数の列に対しても検索ができるようなマクロになった。ということ
になります。


ただし、完成にはもう少し手を加えなければならない部分がありますので、
次回それを行なってこのマクロの完成を目指します。


今回はこれで終了です。


コメント    この記事についてブログを書く
« 祝!4周年ですが、 | トップ | シート全体を検索して着色す... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

マクロ作成のコツ」カテゴリの最新記事