アクセス担当のまみです。
検索文字位置を教えてくれるFind関数ってエクセルではとってもお世話になるのですが、アクセスにはFind関数ってありません。
えっじゃあどうやって文字列検索するの?って思っちゃいますが、アクセスではInStr関数が同じ働きをしてくれます。
良かった!関数の名前が違うけどアクセスでも使えるんですね!
今回は、InStr関数についてお伝えしますね。
InStr関数
アクセスにはFind関数ってないんだね。
そう。エクセルのFind関数にあたるのがInStr関数なんだよ!
構文
InStr ([start, ] string1, string2 [, compare])
引数 | 説明 |
start | 検索の開始位置を設定 省略すると先頭から検索を開始 compareを指定する場合は必須 |
string1 | 検索対象となる文字列を指定 |
string2 | 検索したい文字列を指定 |
compare |
比較モード |
※start, compareにNullがあるとエラーになる。
比較モード
値 | 説明 |
-1 | Option Cpmpareステートメントの設定のとおり 設定がない場合はバイナリモードで比較 |
0 | バイナリーモードで比較 (全角半角、大文字小文字、ひらがなカタカナを区別する) |
1 | テキストモードで比較 (全角半角、大文字小文字、ひらがなカタカナを区別する) |
2 | Accsessの設定のとおり (既定値はテキストモード) |
クエリでInStr関数 を使用する
検索したい文字の位置を数字で教えてくれるってこと?
そうなんだけど、あんまりイメージ湧いてない感じだね。実際にやってみようか?
やってみる!
使用するテーブル
「T_サンプルデータ」
データ型は「短いテキスト」です。
テーブルの準備ができたらクエリを作成するよ!
[quads id=2]
リボンの①「作成」タブから②「クエリデザイン」を選択し、「T_サンプルデータ」を追加します。
3種類の方法で「A」の位置を検索するクエリを作成してみたよ。
InStr: InStr([製品番号],”A”)・・・開始位置を省略しているので先頭からAを検索します。
バイナリ: InStr(1,[製品番号],”A”,0)・・・バイナリモードで先頭からAを検索します。
テキスト: InStr(3,[製品番号],”A”,1)・・・テキストモードで3文字目からAを検索します。
テキストモードは開始位置も指定してあるんだね。
結果がどうなるか予想できる?
テキストモードの結果が自信ないかな~。開始位置が先頭からだったらわかるんだけど。
じゃあ結果を見てみよう!
クエリの結果
へ~。Aが見つからない時は0になるんだ。
開始位置が3のテキストモードはどう?予想と違ってた?
3文字目から検索を初めて見つかったら先頭からの文字位置が返ってくるんだね。
そうそう!
あと開始位置を11にすると0が返ってくるんだよ。
あと開始位置を11にすると0が返ってくるんだよ。
ふ~ん。
じゃあデータにNullや空白があったらどうなるの?
じゃあデータにNullや空白があったらどうなるの?
Nullの時はNullが、空白の時は0が返ってくるよ。
「T_サンプルデータ」に製品名を追加して電源の製品番号にはNull、モニターの製品番号には空白をいれてみてね!
クエリの結果
クエリにはわかりやすいように製品名をいれてみたよ。
Nullと空白は違うんだね。とっても勉強になったよ!
クエリは「Q_検索」と名前をつけておきましょう。
まとめ
エクセルのFind関数にあたるInStr関数を色々なデータで試してみてくださいね。
使用頻度が高い関数なのでぜひ活用してくださいね!