シートを検索して着色するマクロ(完成編)
◆リクエスト紹介
今回は、前回のシリーズ「文字列を検索するマクロ」に関連していただいた
下記のリクエストをご紹介しています。
投稿者:YSさん
>今回の文字列検索マクロ面白いです。
>続きで、シート全体に検索をして、
>対象になったセルの全てに着色が
>したいのですが、可能ですか。
YSさん、リクエストありがとうございます。
◆今日の講座
今回のリクエストも前回までのLessonでだいたいできてきましたが、完成には
まだもう少し手を加えなければならない部分がありますので、今回はその辺の
とこるをまとめて完成に至る予定です。
それでは、前回作成したエクセルマクロ"gogo98.xls"をご用意ください。
1)
まずはじめに、前回作ったマクロをもう1度実行してみます。
――――――――――――――――――――――――――――+
1."gogo98.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.シート[Sheet7]を開いてください。
3.では、さっそく実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(3文字)
ノート
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
すると、新たにノートのセルが黄色く塗りつぶされていればOKです。
でも、ここでちょっと問題なのがA列の前回検索したペンのセルも塗りつぶさ
れたまま(前回の検索結果が残ったまま)になっているという点です。
これはなぜでしょうか?
(ちなみに、B列やC列のペンの前回塗りつぶされた色は消えています。)
この答えは至って簡単ですよね。
2)
では、その答えの確認と改善のためにプログラムの中身をみていきます。
――――――――――――――――――――――――――――+
1.マクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
2.この画面の左上半分の[-標準モジュール]という所の一番下の
[Module3]をダブルクリックします。
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro4()
'
Columns("B:E").Select
Selection.Interior.ColorIndex = xlNone
End Sub
++++++++++++++++++++++++++++―
(この上に Macor3 も表示されていると思いますが、今回は必要ありません
ので無視してください。)
この Macro4 は、前回塗った色が残らないよう選択した列の全てのセルの色を
クリアー(無色に)するプログラムで、Macro1 の最初で呼ばれて(Call Macro4)
実行させるものです。
なので、ここの列の範囲指定をしている部分である"B:E"を修正してやれば
よいということは一目瞭然ですね。
3)
それでは、これを踏まえてこのプログラムを修正します。
――――――――――――――――――――――――――――+
1.この Macro4 の最初の行
Columns("B:E").Select
を、下記に修正します。
Columns("A:IV").Select
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro4()
'
Columns("A:IV").Select
Selection.Interior.ColorIndex = xlNone
End Sub
++++++++++++++++++++++++++++―
エクセルの列というのは最大でも256列までです。(但しExcel2007は除きます)
なので、いま修正した "A:IV" というのは(IVはAから数えて256列目に当たり
ますので)、全ての列を対象とするようにしたということになります。
4)
それでは、確認のため実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、シート[Sheet7]を開いてください。
2.では、さっそく実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
3.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(4文字)
消しゴム
と入力してください。
4.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、「消しゴム」のセル(2箇所)だけが黄色く塗りつぶされていれ
ばOKです。
5)
念のためもう一度実行してみます。
――――――――――――――――――――――――――――+
1.新しく空のシート[Sheet8]を作成してください。
[挿入(I)] → [ワークシート(W)]
2.次に、テスト用のデータを入力します。
以下のテキスト(15行)をコピーして、[Sheet8]の適当な位置にランダムに
(どこでも構いませんので適当にシートを埋め尽くすくらいに10~20回)
次々と貼り付けてみてください。
黒ボールペン
青ボールペン
赤ボールペン
シャーペン0.5mm
シャーペン0.3mm
ノートA4
ノートB5
赤鉛筆
青鉛筆
3色ボールペン
4色ボールペン
消しゴム
蛍光赤ペン
蛍光青ペン
三角定規
3.では、実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(1文字)
赤
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、「赤ボールペン」「赤鉛筆」「蛍光赤ペン」のセルだけが全て
黄色く塗りつぶされていればOKです。
これで、今回のリクエストの「シート全体を検索する」という命題は一応達成
できたということになります。
今回、修正したプログラム Columns("A:IV").Select の "A:IV" の部分ですが
まぁ、256列もデータがある表というのはめったにないと思いますから、通常
はこの部分をデータある列分だけ指定しておけばよいと思います。
最後に、今回のリクエストのポイントをおさらいしておきたいと思いますが、
「検索結果に色を付ける」という方法と、それを「シート全体を検索する」と
いうプログラムに直す方法の2つについて学習してきました。
「検索結果に色を付ける」という方法では、塗りつぶす色の番号は「マクロの
記録」でどんな色でも簡単に調べることができましたよね。
もう一方の「シート全体を検索する」方法では、1列のみを検索する場合方法
1重ループに対して、シート全体のような複数列を検索したい場合には、2重の
ループを組めばよいということを勉強しました。
どちらも、今回のように簡単にちょっとしたプログラムの修正で実現できます
し、更にこれを利用すると検索だけでなく色々と応用範囲が広いと思いますの
で、今後、次の章に入る前にちょとその辺の応用例もご紹介していきたいと思
っています。
今回はこれで終了です。
◆リクエスト紹介
今回は、前回のシリーズ「文字列を検索するマクロ」に関連していただいた
下記のリクエストをご紹介しています。
投稿者:YSさん
>今回の文字列検索マクロ面白いです。
>続きで、シート全体に検索をして、
>対象になったセルの全てに着色が
>したいのですが、可能ですか。
YSさん、リクエストありがとうございます。
◆今日の講座
今回のリクエストも前回までのLessonでだいたいできてきましたが、完成には
まだもう少し手を加えなければならない部分がありますので、今回はその辺の
とこるをまとめて完成に至る予定です。
それでは、前回作成したエクセルマクロ"gogo98.xls"をご用意ください。
1)
まずはじめに、前回作ったマクロをもう1度実行してみます。
――――――――――――――――――――――――――――+
1."gogo98.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.シート[Sheet7]を開いてください。
3.では、さっそく実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(3文字)
ノート
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
すると、新たにノートのセルが黄色く塗りつぶされていればOKです。
でも、ここでちょっと問題なのがA列の前回検索したペンのセルも塗りつぶさ
れたまま(前回の検索結果が残ったまま)になっているという点です。
これはなぜでしょうか?
(ちなみに、B列やC列のペンの前回塗りつぶされた色は消えています。)
この答えは至って簡単ですよね。
2)
では、その答えの確認と改善のためにプログラムの中身をみていきます。
――――――――――――――――――――――――――――+
1.マクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
2.この画面の左上半分の[-標準モジュール]という所の一番下の
[Module3]をダブルクリックします。
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro4()
'
Columns("B:E").Select
Selection.Interior.ColorIndex = xlNone
End Sub
++++++++++++++++++++++++++++―
(この上に Macor3 も表示されていると思いますが、今回は必要ありません
ので無視してください。)
この Macro4 は、前回塗った色が残らないよう選択した列の全てのセルの色を
クリアー(無色に)するプログラムで、Macro1 の最初で呼ばれて(Call Macro4)
実行させるものです。
なので、ここの列の範囲指定をしている部分である"B:E"を修正してやれば
よいということは一目瞭然ですね。
3)
それでは、これを踏まえてこのプログラムを修正します。
――――――――――――――――――――――――――――+
1.この Macro4 の最初の行
Columns("B:E").Select
を、下記に修正します。
Columns("A:IV").Select
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro4()
'
Columns("A:IV").Select
Selection.Interior.ColorIndex = xlNone
End Sub
++++++++++++++++++++++++++++―
エクセルの列というのは最大でも256列までです。(但しExcel2007は除きます)
なので、いま修正した "A:IV" というのは(IVはAから数えて256列目に当たり
ますので)、全ての列を対象とするようにしたということになります。
4)
それでは、確認のため実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、シート[Sheet7]を開いてください。
2.では、さっそく実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
3.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(4文字)
消しゴム
と入力してください。
4.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、「消しゴム」のセル(2箇所)だけが黄色く塗りつぶされていれ
ばOKです。
5)
念のためもう一度実行してみます。
――――――――――――――――――――――――――――+
1.新しく空のシート[Sheet8]を作成してください。
[挿入(I)] → [ワークシート(W)]
2.次に、テスト用のデータを入力します。
以下のテキスト(15行)をコピーして、[Sheet8]の適当な位置にランダムに
(どこでも構いませんので適当にシートを埋め尽くすくらいに10~20回)
次々と貼り付けてみてください。
黒ボールペン
青ボールペン
赤ボールペン
シャーペン0.5mm
シャーペン0.3mm
ノートA4
ノートB5
赤鉛筆
青鉛筆
3色ボールペン
4色ボールペン
消しゴム
蛍光赤ペン
蛍光青ペン
三角定規
3.では、実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま(「Macro1」が選択された状態で)[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(1文字)
赤
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、「赤ボールペン」「赤鉛筆」「蛍光赤ペン」のセルだけが全て
黄色く塗りつぶされていればOKです。
これで、今回のリクエストの「シート全体を検索する」という命題は一応達成
できたということになります。
今回、修正したプログラム Columns("A:IV").Select の "A:IV" の部分ですが
まぁ、256列もデータがある表というのはめったにないと思いますから、通常
はこの部分をデータある列分だけ指定しておけばよいと思います。
最後に、今回のリクエストのポイントをおさらいしておきたいと思いますが、
「検索結果に色を付ける」という方法と、それを「シート全体を検索する」と
いうプログラムに直す方法の2つについて学習してきました。
「検索結果に色を付ける」という方法では、塗りつぶす色の番号は「マクロの
記録」でどんな色でも簡単に調べることができましたよね。
もう一方の「シート全体を検索する」方法では、1列のみを検索する場合方法
1重ループに対して、シート全体のような複数列を検索したい場合には、2重の
ループを組めばよいということを勉強しました。
どちらも、今回のように簡単にちょっとしたプログラムの修正で実現できます
し、更にこれを利用すると検索だけでなく色々と応用範囲が広いと思いますの
で、今後、次の章に入る前にちょとその辺の応用例もご紹介していきたいと思
っています。
今回はこれで終了です。