Excel VBAを使ってセルの検索を行ってみた

こんにちは、雑記ラビリンスです。

 

今回は、Excelのセル内ある文字列を検索をVBAを用いて

行う方法を紹介します。

 

想定するケースとしては、ある列にある文字列を別の列から検索して

対象となる文字列の有無の結果を表示することです。

f:id:kirakira_rin:20181208202113j:plain

B列にある文字列がC列にあった場合、D列にTRUEを

なかった場合はFALSEの表示と背景を赤にする仕様です。

ソースコードは以下のようになります。

    
 Sub ボタン1_Click()

 '変数の設定
 Dim maxRowB As Long
 Dim maxRowC As Long
Dim maxRowD As Long Dim i As Integer Dim name As String Dim check As Range
'対象となる列の最終行を取得する・・・ ① 'B列(比較元) maxRowB = ThisWorkbook.Worksheets(3).Cells(Rows.count, 2).End(xlUp).Row 'C列(比較対象) maxRowC = ThisWorkbook.Worksheets(3).Cells(Rows.count, 3).End(xlUp).Row 'D列 maxRowD = ThisWorkbook.Worksheets(3).Cells(Rows.count, 4).End(xlUp).Row '初期化・・・ ② ThisWorkbook.Worksheets(3).Range("D" & 2, "D" & maxRowD).ClearFormats ThisWorkbook.Worksheets(3).Range("D" & 2, "D" & maxRowD).Value = "" For i = 2 To maxRowC・・・ ③ name = ThisWorkbook.Worksheets(3).Range("C" & i).Value・・・ ④ '比較対象のデータが比較元にあるかを比較 Set check = Range("B2", "B" & maxRowB).Find(name)・・・ ⑤ '⑤の結果によって処理の分岐 If check Is Nothing Then・・・ ⑥ ThisWorkbook.Worksheets(3).Range("D" & i).Interior.Color = RGB(255, 0, 0) ThisWorkbook.Worksheets(3).Range("D" & i).Value = "False" Else ThisWorkbook.Worksheets(3).Range("D" & i).ClearFormats ThisWorkbook.Worksheets(3).Range("D" & i).Value = "True" End If Next i End Sub

 ①対象となる列の最終行の取得

 

最初に対象となる列の最終行の取得を行います。

これは検索範囲となるB列の範囲を動的に求めるため

C列にある文字列の個数、そしてD列にある文字列の個数を

求めるためです。

B列の最終行を求める記述は下の様になります。

 

maxRowB = ThisWorkbook.Worksheets(3).Cells(Rows.count, 2).End(xlUp).Row

 

ThisWorkbook:実際にVBAが動いているブック

Worksheets(3):対象となるワークシート。

⇒かっこの中の数字は左から数えたシートの位置

Cells(Rows.count, 2):

⇒Cells(行、列)で、B列は2番目なので2、

最大行の取得方法はRows.countで表します。

 End(xlUp).Row:

⇒上方向に最終行を検索。ワークシートの一番下から上に向かって空白でない

セルを検索

 

②続いて初期化

これは前回検索をした結果を削除するために行います。

ClearFormatsをセットすることでセルの背景色を塗りつぶし無しに、

また値にから文字をセットにより前回の結果を消します。

 

③ループによってC列の文字列の数だけ検索

 For i = 2 To maxRowC

によってC列の2行目から最終行であるmaxRowC行まで検索します。

④でC列のセル内の文字列をname変数にセットし

⑤でC列の文字列がB列にあるかをチェックします。

 

⑥の処理で⑤の結果があった場合となかった場合によるD列の出力を変えています。

 

C列の値がB列に見当たらなかった場合は、背景を赤で表示はFALSEを

存在した場合はTRUEの表示を行っています。

 

その結果がこれ

f:id:kirakira_rin:20181208205852j:plain

bananaとkyabetuはB列にあるのでTRUEが、それ以外はB列にはないので

FALSEが表示されました。

 

 

おしまい