AccessにFind関数はない?文字列検索する方法

 

アクセス担当のまみです。

 

検索文字位置を教えてくれるFind関数ってエクセルではとってもお世話になるのですが、アクセスにはFind関数ってありません。

 

えっじゃあどうやって文字列検索するの?って思っちゃいますが、アクセスではInStr関数が同じ働きをしてくれます。

 

良かった!関数の名前が違うけどアクセスでも使えるんですね!

 

今回は、InStr関数についてお伝えしますね。

 

InStr関数

 

(はてな君)
アクセスにはFind関数ってないんだね。

 

(あいちゃん)
そう。エクセルのFind関数にあたるのがInStr関数なんだよ!

 

構文
InStr ([start, ] string1, string2 [, compare])
[ ]内は省略可能です。

 

引数 説明
start 検索の開始位置を設定
省略すると先頭から検索を開始
compareを指定する場合は必須
string1 検索対象となる文字列を指定
string2 検索したい文字列を指定
compare

比較モード
(省略するとクエリやフォームでは「2」VBAでは「-1」が指定される)
※下記参照

※start, compareにNullがあるとエラーになる。

 

比較モード

説明
-1 Option Cpmpareステートメントの設定のとおり
設定がない場合はバイナリモードで比較
0 バイナリーモードで比較
(全角半角、大文字小文字、ひらがなカタカナを区別する)
1 テキストモードで比較
(全角半角、大文字小文字、ひらがなカタカナを区別する)
2 Accsessの設定のとおり
(既定値はテキストモード)

 

 

クエリでInStr関数 を使用する

 

(はてな君)
検索したい文字の位置を数字で教えてくれるってこと?

 

(あいちゃん)
そうなんだけど、あんまりイメージ湧いてない感じだね。実際にやってみようか?

 

(はてな君)
やってみる!

 

 

使用するテーブル

「T_サンプルデータ」

データ型は「短いテキスト」です。

 

(あいちゃん)
テーブルの準備ができたらクエリを作成するよ!

 

 

リボンの①「作成」タブから②「クエリデザイン」を選択し、「T_サンプルデータ」を追加します。

 

 

(あいちゃん)
3種類の方法で「A」の位置を検索するクエリを作成してみたよ。

 

InStr: InStr([製品番号],”A”)・・・開始位置を省略しているので先頭からAを検索します。

バイナリ: InStr(1,[製品番号],”A”,0)・・・バイナリモードで先頭からAを検索します。

テキスト: InStr(3,[製品番号],”A”,1)・・・テキストモードで3文字目からAを検索します。

 

(はてな君)
テキストモードは開始位置も指定してあるんだね。

 

(あいちゃん)
結果がどうなるか予想できる?

 

(はてな君)
テキストモードの結果が自信ないかな~。開始位置が先頭からだったらわかるんだけど。

 

(あいちゃん)
じゃあ結果を見てみよう!

 

 

クエリの結果

 

(はてな君)
へ~。Aが見つからない時は0になるんだ。

 

(あいちゃん)
開始位置が3のテキストモードはどう?予想と違ってた?

 

(はてな君)
3文字目から検索を初めて見つかったら先頭からの文字位置が返ってくるんだね。

 

(あいちゃん)
そうそう!
あと開始位置を11にすると0が返ってくるんだよ。

 

(はてな君)
ふ~ん。
じゃあデータにNullや空白があったらどうなるの?

 

(あいちゃん)
Nullの時はNullが、空白の時は0が返ってくるよ。

 

 

(あいちゃん)
「T_サンプルデータ」に製品名を追加して電源の製品番号にはNull、モニターの製品番号には空白をいれてみてね!

 

クエリの結果

 

(あいちゃん)
クエリにはわかりやすいように製品名をいれてみたよ。

 

(はてな君)
Nullと空白は違うんだね。とっても勉強になったよ!

 

クエリは「Q_検索」と名前をつけておきましょう。

 

まとめ

 

エクセルのFind関数にあたるInStr関数を色々なデータで試してみてくださいね。

 

使用頻度が高い関数なのでぜひ活用してくださいね!