テーマ:シートを検索して着色するマクロ(その1)
◆リクエスト紹介
今回は、前回のシリーズ「文字列を検索するマクロ」に
関連していただいた下記のリクエストをご紹介します。
投稿者:YSさん
>今回の文字列検索マクロ面白いです。
>続きで、シート全体に検索をして、
>対象になったセルの全てに着色が
>したいのですが、可能ですか。
YSさん、リクエストありがとうございます。
今回のリクエストのポイントは
検索結果に色を付けるということ、
シート全体を検索するということ、
この2つですのでこのシリーズでは
その辺を重点に勉強していきたい
と思います。
1)
まずはじめに、プログラムの中身の確認です。
――――――――――――――――――――――――――――+
1."gogo94.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.マクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro1()
'
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
Range("E" & i).Select
ActiveCell.FormulaR1C1 = a
End If
Next i
Range("E2").Select
End Sub
++++++++++++++++++++++++++++―
これは、前々回(No94)で作成した「ループで回しその中のIF文で探し出す方法」
による文字列を検索するマクロプログラムです。
このマクロでは、検索されたB列のデータをE列にコピーすることで検索結果を
表示していたわけですが、今回はこの検索結果のセルに色をつけるということ
で表現するようにします。
2)
それではまず、新しいマクロの記録から行ないます。
――――――――――――――――――――――――――――+
1.まずは、いつものように「マクロの記録」を開始します。
[ツール(T)] → [マクロ(M)] → [●新しいマクロの記録(R)...]
→ マクロの記録画面が出るのでそのまま[OK]をクリック。
2.次に、以下の操作でセルに色をつけます。
[書式(O)] → [セル(E)...] で「セルの書式設定」画面を開き、
[パターン]タブで、セルの網掛けの色を黄色(左から3列目の上から
4番目の色)をクリックし、下の[OK]ボタンをクリックします。
(この操作は、コマンドバーの[塗りつぶしの色]を使ってやっても
特に問題はありません。)
3.最後に、[ツール(T)] → [マクロ(M)] → [■記録終了(R)]とやって、
マクロの記録を終了させます。
――――――――――――――――――――――――――――+
3)
それでは、いま記録したプログラムの中身を見てみましょう。
――――――――――――――――――――――――――――+
1.まず、タスクバーで先ほどのプログラム用の画面を表示させます。
2.この画面の左上半分の[-標準モジュール]という所の下の
[Module2]の方をダブルクリックします。
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro2()
'
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
++++++++++++++++++++++++++++―
このプログラムを見れば、感のよい方ならすぐにピンときたとは思いますが、
ここで1つ簡単な問題です。
Q.黄色は何番でしょうか?
・
・
・
これは簡単ですよね(^^)。
そうです、この場合、黄色は6番だ!ということは私が言うまでもなく誰でも
分かることですので、この問題を解くのにプログラムが分かる、分からない、
なんてことは一切関係がないわけです。
(先ほどの色つけの操作方法によっては、若干上記プログラムと違いがある
場合もありますが、そんなこともここでは一切気にする必要はありません。)
4)
それでは、プログラムに少し手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、画面の左上半分の[-標準モジュール]という所の下の
今度は[Module1]の方をダブルクリックしてください。
2.そうしたら、右側に表示されたMacro1()のプログラムの
中ほどのIf文の中の2行
Range("E" & i).Select
ActiveCell.FormulaR1C1 = a
を下記の1行に書き改めてください。
Call Macro2
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro1()
'
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
++++++++++++++++++++++++++++―
この修正は、まさに「検索されたデータをE列にコピーする」というマクロを
「検索されたデータのセルを黄色く塗りつぶす」というマクロへと変えた。
ということに他なりません。
5)
それでは、確認のため実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、新しく空のシート[Sheet6]を作成してください。
[挿入(I)] → [ワークシート(W)]
2.次に、テスト用のデータを入力します。
以下のテキスト(15行)をコピーして、[Sheet6]のセルB1の位置に
そのまま貼り付けてください。
ボールペン
ノート
シャーペン
消しゴム
ボールペン赤
ノートA4
3色ボールペン
4色ボールペン
修正液
シャーペン0.5mm
ボールペン黒
ノートA5
シャーペン0.3mm
消しゴム
ボールペン青
3.では、実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(2文字)
ペン
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、B列のペンという文字を含むデータのセル(9つ)が黄色く塗りつ
ぶされていればOKです。
では、ここでもう1つ問題です。
Q.ではこのマクロを「検索されたデータのセルを赤く塗りつぶす」
というように修正するには、どうしたらよいでしょうか?
分かりましたか!?
分かる方にとってはごく簡単な問題ですが、「赤って何番??」っていう方の
ために、この問題の答えは次回発表することにします。
今回はこれで終了です。
今日作ったマクロプログラムは次回もこの続きでまた使いますので、大切に
保管しておいてください。(ファイル名 "gogo96.xls" )
無料メルマガ講座のご登録は、▼こちらから▼
「Go! Go! エクセルマクロをはじめよう!」
◆リクエスト紹介
今回は、前回のシリーズ「文字列を検索するマクロ」に
関連していただいた下記のリクエストをご紹介します。
投稿者:YSさん
>今回の文字列検索マクロ面白いです。
>続きで、シート全体に検索をして、
>対象になったセルの全てに着色が
>したいのですが、可能ですか。
YSさん、リクエストありがとうございます。
今回のリクエストのポイントは
検索結果に色を付けるということ、
シート全体を検索するということ、
この2つですのでこのシリーズでは
その辺を重点に勉強していきたい
と思います。
1)
まずはじめに、プログラムの中身の確認です。
――――――――――――――――――――――――――――+
1."gogo94.xls"を開きます。(セキュリティ確認画面が表示された
場合には、[マクロを有効にする]を選んでください。)
2.マクロプログラムを表示します。
[ツール(T)] → [マクロ(M)] → [Visual Basic Editor(V)]
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro1()
'
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
Range("E" & i).Select
ActiveCell.FormulaR1C1 = a
End If
Next i
Range("E2").Select
End Sub
++++++++++++++++++++++++++++―
これは、前々回(No94)で作成した「ループで回しその中のIF文で探し出す方法」
による文字列を検索するマクロプログラムです。
このマクロでは、検索されたB列のデータをE列にコピーすることで検索結果を
表示していたわけですが、今回はこの検索結果のセルに色をつけるということ
で表現するようにします。
2)
それではまず、新しいマクロの記録から行ないます。
――――――――――――――――――――――――――――+
1.まずは、いつものように「マクロの記録」を開始します。
[ツール(T)] → [マクロ(M)] → [●新しいマクロの記録(R)...]
→ マクロの記録画面が出るのでそのまま[OK]をクリック。
2.次に、以下の操作でセルに色をつけます。
[書式(O)] → [セル(E)...] で「セルの書式設定」画面を開き、
[パターン]タブで、セルの網掛けの色を黄色(左から3列目の上から
4番目の色)をクリックし、下の[OK]ボタンをクリックします。
(この操作は、コマンドバーの[塗りつぶしの色]を使ってやっても
特に問題はありません。)
3.最後に、[ツール(T)] → [マクロ(M)] → [■記録終了(R)]とやって、
マクロの記録を終了させます。
――――――――――――――――――――――――――――+
3)
それでは、いま記録したプログラムの中身を見てみましょう。
――――――――――――――――――――――――――――+
1.まず、タスクバーで先ほどのプログラム用の画面を表示させます。
2.この画面の左上半分の[-標準モジュール]という所の下の
[Module2]の方をダブルクリックします。
――――――――――――――――――――――――――――+
++++++++++++++++++++++++++++―
Sub Macro2()
'
With Selection.Interior
.ColorIndex = 6
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
++++++++++++++++++++++++++++―
このプログラムを見れば、感のよい方ならすぐにピンときたとは思いますが、
ここで1つ簡単な問題です。
Q.黄色は何番でしょうか?
・
・
・
これは簡単ですよね(^^)。
そうです、この場合、黄色は6番だ!ということは私が言うまでもなく誰でも
分かることですので、この問題を解くのにプログラムが分かる、分からない、
なんてことは一切関係がないわけです。
(先ほどの色つけの操作方法によっては、若干上記プログラムと違いがある
場合もありますが、そんなこともここでは一切気にする必要はありません。)
4)
それでは、プログラムに少し手を加えていきます。
――――――――――――――――――――――――――――+
1.まず、画面の左上半分の[-標準モジュール]という所の下の
今度は[Module1]の方をダブルクリックしてください。
2.そうしたら、右側に表示されたMacro1()のプログラムの
中ほどのIf文の中の2行
Range("E" & i).Select
ActiveCell.FormulaR1C1 = a
を下記の1行に書き改めてください。
Call Macro2
――――――――――――――――――――――――――――+
修正した後のプログラムはつぎの様になります。
++++++++++++++++++++++++++++―
Sub Macro1()
'
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
++++++++++++++++++++++++++++―
この修正は、まさに「検索されたデータをE列にコピーする」というマクロを
「検索されたデータのセルを黄色く塗りつぶす」というマクロへと変えた。
ということに他なりません。
5)
それでは、確認のため実行してみましょう。
――――――――――――――――――――――――――――+
1.エクセルの画面に戻って、新しく空のシート[Sheet6]を作成してください。
[挿入(I)] → [ワークシート(W)]
2.次に、テスト用のデータを入力します。
以下のテキスト(15行)をコピーして、[Sheet6]のセルB1の位置に
そのまま貼り付けてください。
ボールペン
ノート
シャーペン
消しゴム
ボールペン赤
ノートA4
3色ボールペン
4色ボールペン
修正液
シャーペン0.5mm
ボールペン黒
ノートA5
シャーペン0.3mm
消しゴム
ボールペン青
3.では、実行します。
[ツール(T)] → [マクロ(M)] → [マクロ(M)...] → マクロ画面が出るので
そのまま[実行]をクリック。
4.すると、入力窓のあるポップアップ画面が表示されたと思いますので、
その入力窓に以下の日本語(2文字)
ペン
と入力してください。
5.そうしたら、このポップアップ画面にある[OK]ボタンをクリックします。
――――――――――――――――――――――――――――+
実行した結果、B列のペンという文字を含むデータのセル(9つ)が黄色く塗りつ
ぶされていればOKです。
では、ここでもう1つ問題です。
Q.ではこのマクロを「検索されたデータのセルを赤く塗りつぶす」
というように修正するには、どうしたらよいでしょうか?
分かりましたか!?
分かる方にとってはごく簡単な問題ですが、「赤って何番??」っていう方の
ために、この問題の答えは次回発表することにします。
今回はこれで終了です。
今日作ったマクロプログラムは次回もこの続きでまた使いますので、大切に
保管しておいてください。(ファイル名 "gogo96.xls" )
無料メルマガ講座のご登録は、▼こちらから▼
「Go! Go! エクセルマクロをはじめよう!」