文字の検索

●Range.Find メソッド (Excel)
microsoftの基本情報
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.find
構文
expression.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
※expression は Range オブジェクトを表す変数です。
各パラメータの説明
microsoftの基本情報
https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.find
構文
expression.Find (What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
※expression は Range オブジェクトを表す変数です。
各パラメータの説明
名前 | 必須/オプション | データ型 | 説明 |
---|---|---|---|
What | 必須 | バリアント | 検索するデータです。 指定できるのは、文字列、または任意の Microsoft Excel のデータ型です。 | After | 省略可 | バリアント | このセルの後から検索を開始します。 これは、ユーザー インターフェイスから検索が実行されたときにアクティブなセルの場所に対応しています。 After は範囲内の 1 つのセルにする必要があることに注意してください。 このセルの後から検索が開始されるため、メソッドによって範囲内の他のセルがすべて検索され、このセルに戻るまで、指定されたセルは検索されません。 この引数を指定しない場合は、範囲の左上端のセルの後から検索が開始されます。 | LookIn | 省略可 | バリアント | 使用できるのは、XlFindLookIn 定数: xlFormulas、xlValues、xlComments あるいは xlCommentsThreaded のいずれかです。 | LookAt | 省略可 | バリアント | 次の XlLookAt 定数:xlWhole あるいは xlPart のいずれかになります 。 | SearchOrder | 省略可 | バリアント | 次の XlSearchOrder 定数:xlByRows あるいは xlByColumns のいずれかになります 。 | SearchDirection | 省略可 | バリアント | 次の XlSearchDirection 定数: xlNext あるいは xlPrevious のいずれかになります。 | MatchCase | 省略可 | バリアント | 大文字と小文字を区別するには、True を指定します。 既定値は False です。 | MatchByte | 省略可 | バリアント | 2 バイトの言語サポートが選択またはインストールされている場合にのみ使用されます。 2 バイト文字が 2 バイト文字とだけ一致するようにする場合は、True を指定します。 2 バイト文字が同等の 1 バイト文字とも一致するようにする場合は、False を指定します。 | SearchFormat | 省略可 | バリアント | 検索の書式を指定します。 |
●具体的な記述例
■■■有無の検索:最初に見つかった文字の情報■■■
この検索方法は、検索文字が、対象エリアにあるかどうかだけを調べます。
Worksheets("DATA"):検索対象のワークシート
sechr:検索する文字列(文字列)
[検索対象]
列単位の検索:Worksheets("DATA").Columns(***)
範囲の検索:Worksheets("DATA").Range(***)
ワークシート全体の検索:Worksheets("DATA").cells
resrng:検索結果(レンジ)
完全一致の場合
resrng=検索対象.Find(sechr, LookAt:=xlWhole)
部分一致の場合
resrng=検索対象.Find(sechr, LookAt:=xlPart)
結果の取り出し例
見つかった文字のある行数:resrng.row
見つかった文字のある列数:resrng.Column
■■■抽出検索:検索条件にあったデータを全て抽出します■■■
この検索方法は、検索条件にあった対象エリアにあるすべてのデータを抽出します。
検索を繰り返すには、FindNext および FindPrevious メソッドを使用します。
検索が指定された検索範囲の最後に達すると、範囲の最初に戻ります。
最初に戻ったときに検索を停止するには、最初に見つかったセルの位置を保存しておき、
セルが見つかるたびに、その位置と保存しておいた位置を比較します。
今回は、findメソッドではなく、順次対象データを検索するFindNextメソッドを使います。
パラメータ関係はFindメソッドと同じです。
Worksheets("DATA"):検索対象のワークシート
sechr:検索する文字列(文字列)
[検索対象:serange]
列単位の検索:Worksheets("DATA").Columns(***)
範囲の検索:Worksheets("DATA").Range(***)
ワークシート全体の検索:Worksheets("DATA").cells
ループ処理で全てのデータを抽出
***最初に見つかった行に戻るまでループして検索***
1)まず。最初に見つかった行を取得する
res1st = serange.Find(sechr)
res1st:最初に見つかった行
2)最初に見つかった行に戻るまでループして検索
Do ========================================
Set res1st = serange.FindNext(res1st)-----> (Findnext検索)
k = k + 1 -----> (件数カウンター)
Loop While res1st.Row <> resrng.Row ==================
全てのデータを取得する場合、変数に収容するのが一般的ですが 下記に示すように、セルの色を変えたり、対象データだけを別のシートに コピーしたりします。
■■■有無の検索:最初に見つかった文字の情報■■■
この検索方法は、検索文字が、対象エリアにあるかどうかだけを調べます。
Worksheets("DATA"):検索対象のワークシート
sechr:検索する文字列(文字列)
[検索対象]
列単位の検索:Worksheets("DATA").Columns(***)
範囲の検索:Worksheets("DATA").Range(***)
ワークシート全体の検索:Worksheets("DATA").cells
resrng:検索結果(レンジ)
完全一致の場合
resrng=検索対象.Find(sechr, LookAt:=xlWhole)
部分一致の場合
resrng=検索対象.Find(sechr, LookAt:=xlPart)
結果の取り出し例
見つかった文字のある行数:resrng.row
見つかった文字のある列数:resrng.Column
■■■抽出検索:検索条件にあったデータを全て抽出します■■■
この検索方法は、検索条件にあった対象エリアにあるすべてのデータを抽出します。
検索を繰り返すには、FindNext および FindPrevious メソッドを使用します。
検索が指定された検索範囲の最後に達すると、範囲の最初に戻ります。
最初に戻ったときに検索を停止するには、最初に見つかったセルの位置を保存しておき、
セルが見つかるたびに、その位置と保存しておいた位置を比較します。
今回は、findメソッドではなく、順次対象データを検索するFindNextメソッドを使います。
パラメータ関係はFindメソッドと同じです。
Worksheets("DATA"):検索対象のワークシート
sechr:検索する文字列(文字列)
[検索対象:serange]
列単位の検索:Worksheets("DATA").Columns(***)
範囲の検索:Worksheets("DATA").Range(***)
ワークシート全体の検索:Worksheets("DATA").cells
ループ処理で全てのデータを抽出
***最初に見つかった行に戻るまでループして検索***
1)まず。最初に見つかった行を取得する
res1st = serange.Find(sechr)
res1st:最初に見つかった行
2)最初に見つかった行に戻るまでループして検索
Do ========================================
Set res1st = serange.FindNext(res1st)-----> (Findnext検索)
k = k + 1 -----> (件数カウンター)
Loop While res1st.Row <> resrng.Row ==================
全てのデータを取得する場合、変数に収容するのが一般的ですが 下記に示すように、セルの色を変えたり、対象データだけを別のシートに コピーしたりします。
設定画面 | 検索結果 |
---|---|
![]() |
![]() |
このサンプルは、列単位での有無検索を行います。
検索モードとしては
・完全一致
・部分一致
が選択出来ます
検索対象範囲:serange
検索対象列:seclm
Set serange = Worksheets("DATA").Columns(seclm)
範囲での検索の場合
Set serange = Worksheets("DATA").range
シート単位での検索の場合
Set serange = Worksheets("DATA").cells
有無の検索:最初に見つかった文字の情報
文字の検索_有無検索(列単位検索)(ダウンロード)
設定画面 | 検索結果1 | 検索結果2 |
---|---|---|
![]() |
![]() |
![]() |
検索モードとしては
・完全一致
・部分一致
が選択出来ます
検索の範囲
シート単位での検索
Set serange = Worksheets("DATA").cells
文字の検索(全数検索,検索対象:全文書)
文字の検索_全数検索(シート単位)(ダウンロード)
設定画面 | 検索結果1 | 検索結果2 |
---|---|---|
![]() |
![]() |
![]() |
少し実用的になりました。
検索モード
有無検索(部分一致、完全一致)
全数検索(部分一致、完全一致)
検索対象
検索対象(列単位、シート全体)
以上の文字検索のサンプルプログラムです。
対象データとしては、郵政省の郵便番号関係のデータを用いています。(124508件)
住所・地名のデータベース的にも使えます。
https://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip
※読み仮名データの促音・拗音を小書きで表記するもの(zip形式)