黙々とC#

"In a mad world of VBA, only the mad are sane" 『VBAという名の狂った世界で狂っているというのなら私の気は確かだ』

検索

本記事は、Excel C# Script入門講座の1記事です。

検索

シート内で文字列を検索するは、検索したい範囲を表すRangeオブジェクトを用意し、RangeオブジェクトのFindメソッドを使用します。引数で、検索条件を指定します。

Findメソッドの構文

(Rangeオブジェクト).Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Findメソッドの戻り値

検索範囲の先頭のセルを表す Rangeオブジェクトが戻ってきます。

一致するデータが見つからなかった場合、null が戻ってきます。

Findメソッドの引数

引数名 必須 / オプション 内容
What 必須 検索するデータです。文字列など、セル内のデータに該当する値を指定します。
After 省略可能 検索を開始する1つ前のセルを指定します。
LookIn 省略可能 検索対象を指定します。
LookAt 省略可能 「セル内容が完全に同一のものだけを検索するか」どうかを指定します。
SearchOrder 省略可能 検索の際、行列のいずれの方向(順序)に検索するかを指定します。
SearchDirection 省略可能 検索を前方向、後ろ方向のどちら向きに検索するかを指定します。
MatchCase 省略可能 大文字と小文字を区別するには、true を指定します。既定値は false です。
MatchByte 省略可能 半角、全角を区別するには、trueを指定します。既定値は false です。
SearchFormat 省略可能 検索において、書式条件を検索対象とするかを指定します。規定値はfalseです。
引数After

引数 After には、セル範囲内(Rangeオブジェクト内)の1つのセルを指定する必要があります。

これは、ユーザーが通常の画面上で検索を実行する際のアクティブなセルの場所に対応しています。このセルの次のセルから検索が開始され、範囲内の他のセルがすべて検索されたあとに、指定されたセルが検索されます。

この引数を省略すると、対象セル範囲(Rangeオブジェクトの範囲)における左上端のセルが検索の開始点になります。

引数LookIn

引数 LookIn には、XlFindLookIn 列挙型を指定します。各メンバの意味は以下のとおり。

名前 説明
xlComments -4144 コメント
xlFormulas -4123 数式
xlValues -4163
引数LookAt

使用できる定数は、XlLookAt 列挙型の xlWhole または xlPart です。

名前 説明
xlWhole 1 検索文字列全体に一致する(完全に一致する)候補のみを取得します。
xlPart 2 検索文字列の一部に一致する候補を取得します。
引数SearchOrder

使用できる定数は、XlSearchOrder 列挙型の xlByRows または xlByColumns です。

名前 説明
xlByRows 1 行を横方向に検索し終えた後、次の行を検索します。
xlByColumns 2 行を下方向に検索し終えた後、次の列を検索します。
引数SearchDirection

使用できる定数は、XlSearchDirection列挙型の xlNextまたはxlPreviousです。

名前 説明
xlNext 1 後方検索(通常の検索方向)
xlPrevious 2 前方検索
引数MatchByte

「半角と全角を区別する」場合にtrueを指定にします。半角・全角の区別を行わない場合にはfalseを指定します。

この引数は、OSに 2 バイト (全角) 文字の言語サポートが導入されている場合にだけ使用できます。

引数SearchFormat

検索において書式条件を有効する(文字だけでなく書式も含めて検索する)場合にtrueにします。デフォルトはfalseです。

書式条件は、ApplicationオブジェクトのFindFormatプロパティで設定します。

サンプルコード

下記の例では、"Sheet1"に文字列"りんご"が存在するか検索し、存在した場合その位置を表示します。

var keyword = "りんご";
var hitRange = Excel.Worksheets("Sheet1").Cells.Find(keyword);
var message = "";
if (hitRange == null)
{
    message = $"{keyword} は見つかりませんでした";
}
else
{
    var r = hitRange.Row;
    var c = hitRange.Column;
    message = $"{keyword} は {r}行目{c}列目にあります";
}
Excel.StatusBar = message;

下記例では、"Sheet1"に文字列"C#"と完全一致するセルが存在するか検索し、存在した場合そのセルを太字にします。

var keyword = "C#";
var hitRange = Excel.Worksheets("Sheet1").Cells.Find(What:keyword, LookIn:-4163, LookAt:1);
if (hitRange != null)
{
    hitRange.Font.Bold = true;
}