Find メソッド
指定したセル範囲内の特定の情報を含むセルを検索します。
object.Find ( what [, after, lookin, lookat, searchorder, searchdirection, matchcase, matchbyte, searchformat ] )
引数・戻り値
- object ・・・ 対象となる Range オブジェクトを指定します。
- what ・・・ 検索する文字列、値など、セル内のデータに該当する値を指定します。省略不可。
- after ・・・ object で指定したセル範囲内のセルの1つを指定します。このセルの次のセルから検索が開始されます。このセル自体は、指定範囲全体を検索し戻ってくるまでは検索されません。省略すると、対象のセル範囲左上端セルが検索開始点となります。
- lookin ・・・ 検索対象となる定数(XlFindLookIn 列挙型)または、その値を指定します。
定数 値 内容 xlComments -4144 コメント xlFormulas -4123 数式 xlValues -4163 値(文字列、数値) - lookat ・・・ 検索条件を表す定数(XlFindLookAt 列挙型)または、その値を指定します。
定数 値 内容 xlWhole 1 完全一致のセルを検索 xlPart 2 検索文字列を含むセルを検索 - searchorder ・・・ 検索時に縦横どちらの行列単位として検索するかを表す定数(XlSearchOrder 列挙型)または、その値を指定します。
定数 値 内容 xlByRows 1 行を横方向に検索してから、次の行に移動 xlByColumns 2 列を下方向に検索してから、次の列に移動 - searchdirection ・・・ 検索方向を表す定数(XlSearchDirection 列挙型)または、その値を指定します。
定数 値 内容 xlNext 1 後方検索 xlPrevious 2 前方検索 - matchcase ・・・ 大文字と小文字を区別する場合は、True を、しない場合は False を指定します。既定値は、False です。
- matchbyte ・・・ 半角文字、全角文字を区別する場合は、True を、しない場合は False を指定します。既定値は、False です。
- searchformat ・・・ CellFormat オブジェクト に設定された書式を検索する場合は、True を、しない場合は、False を指定します。既定値は、False です。
- 戻り値 ・・・ 検索の結果、条件を満たすセルが見つかったらその先頭のセルを表す Range オブジェクトを返します。見つからなかった場合は、Nothing を返します。
Find メソッドを使用すると、指定した引数の設定は、保存され、次にこのメソッドを使用するときにこれらの引数の指定を省略すると、保存された設定が使用されます。意図した検索を行うためには、メソッドを使用するたびに、これらの引数を明示的に指定します。また、ここで保存された内容は、[検索と置換] ダイアログボックスに表示される設定に反映されます。
同じ検索を繰り返すときは、FindNext メソッド または、FindPrevious メソッド を使用します。
Find メソッド 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Sample01_Find() Dim myRng1 As Range, myRng2 As Range, myRng3 As Range '検索値「ANPER9RR」開始「A1」対象「値」条件「完全一致」縦横方向「行→列」 '方向「後方検索」大文字小文字「区別しない」半角全角「区別しない」書式検索「しない」 Set myRng1 = Range("部品表").Find("ANPR9RR", _ After:=Range("A1"), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False, _ SearchFormat:=False) '検索値「抵抗」、その他は、上記での設定がそのまま使用される Set myRng2 = Range("A2:E15").Find("抵抗") '検索値「コンデンサ」条件「検索文字列を含むセルを検索」 Set myRng3 = Range("部品表").Find("コンデンサ", LookAt:=xlPart) 'セルの背景色を赤 If Not myRng1 Is Nothing Then myRng1.Interior.Color = RGB(255, 0, 0) 'セルの背景色を緑 If Not myRng2 Is Nothing Then myRng2.Interior.Color = RGB(0, 255, 0) 'セルの背景色を青 If Not myRng3 Is Nothing Then myRng3.Interior.Color = RGB(0, 0, 255) End Sub |
Find メソッド 使用例 実行結果
サンプルVBAソース実行前
実行後
Find メソッド(コメントの検索) 使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub Sample02_Find() Dim myRng As Range Dim FirstCell As Range Dim str As String '検索値「注意」開始「A1」対象「コメント」条件「部分一致」縦横方向「行→列」 '方向「後方検索」大文字小文字「区別しない」半角全角「区別しない」書式検索「しない」 Set myRng = Cells.Find("注意", _ After:=Range("A1"), _ LookIn:=xlComments, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False, _ SearchFormat:=False) Set FirstCell = myRng Do str = str & myRng.Comment.Text & vbLf '次を検索 Set myRng = Cells.FindNext(myRng) '最初の検索位置に戻ったら終了する If myRng.Address = FirstCell.Address Then Exit Do End If Loop MsgBox str End Sub |
Find メソッド(コメントの検索)使用例 実行結果
サンプルVBAソース実行前
実行後
Find メソッド(日付の検索1) 使用例
日付の検索について:
引数 what には、シリアル値 を指定します。
(例)
what: = “2015/1/1” とするとエラーになります。
what: = DateValue(“2015/1/1”) のようにシリアル値に変換します。
引数 lookin には、xlValues または、xlFormulas を指定します。
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Sub Sample03_Find() Dim myRng As Range Dim FirstCell As Range Dim Total As Double '検索値「2014/7/27」開始「A1」対象「値」条件「完全一致」縦横方向「行→列」 '方向「後方検索」大文字小文字「区別しない」半角全角「区別しない」書式検索「しない」 Set myRng = Cells.Find(What:=DateValue("2014/7/27"), _ After:=Range("A1"), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ MatchByte:=False, _ SearchFormat:=False) Set FirstCell = myRng '「2014/7/27」の金額の合計を求めます Do Total = Total + myRng.Offset(0, 5).Value '次を検索 Set myRng = Cells.FindNext(myRng) '最初の検索位置に戻ったら終了する If myRng.Address = FirstCell.Address Then Exit Do End If Loop MsgBox CStr(Format(Total, "\\#,#")) End Sub |
Find メソッド(日付の検索1)使用例 実行結果
サンプルVBAソース実行前
実行後
Find メソッド(日付の検索2) 使用例
日付の検索について:
セルに数式が入力されている場合で、書式が日付、種類に「*2012/3/14」のように「*」がつく表示形式の場合
引数 what には、シリアル値 を指定します。また、引数 lookin には、xlValues を指定します。
セルに数式が入力されている場合で、書式が日付、種類に「2012年3月」のように「*」がつかない表示形式の場合
引数 what には、表示通りの値 「2012年3月」等を指定します。また、引数 lookin には、xlValues を指定します。
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub Sample04_Find() Dim myRng1 As Range, myRng2 As Range Set myRng1 = Cells.Find(What:=DateValue("2015/1/2"), LookIn:=xlValues) Set myRng2 = Cells.Find(What:="1月10日", LookIn:=xlValues) MsgBox myRng1.Text & vbLf & myRng2.Text End Sub |
Find メソッド(日付の検索2)使用例 実行結果
サンプルVBAソース実行前
「A1」セルには、「2015/1/1」が入力されており、「A2」セル以降は、「=A1+1」「=A2+1」…「=A20+1」が入力されている。
「A2」から「A10」までの書式設定は、「日付」の「*2012/3/14」
「A11」から「A20」までの書式設定は、「日付」の「3月14日」
実行後