9/14/2025

Access。クエリ。空白を見極める:全角・半角の違いもInStr関数でスマートに判定【Space】

Access。クエリ。空白を見極める:全角・半角の違いもInStr関数でスマートに判定

<InStr関数>

テーブルに氏名フィールドがあります。

Access。クエリ。空白を見極める:全角・半角の違いもInStr関数でスマートに判定

この氏名フィールドの中に、空白があるのか、ないのかを確認したい。


さらに、全角・半角を区別したい。


そこで、何かいい方法はないのでしょうか。


今回用意したデータを確認します。


S001の氏名には、空白はありません。

S002の氏名には、全角空白が1文字あります。

S003の氏名には、半角空白が1文字あります。

S004の氏名には、半角空白が2文字あります。

全角空白1文字ではありません。


そこで、今回は、InStr関数をつかうことにしました。


InStr関数は、検索文字が登場する文字数を求めることができる関数です。


では、クエリで、演算フィールドをつくって確認してみます。


まず、クエリを実行した結果をみてみましょう。


InStr関数は、設定によって、算出結果が異なりますので、まずは、結果をみると、S001は、すべて「0」と表示されています。


つまり、全角でも半角でも空白はないことを意味しています。


どのような演算フィールドをつくったのか、確認していきましょう。


空白確認は、

空白確認: InStr([氏名]," ")

という演算フィールドで求めています。


氏名フィールドに、「" "」は、あるのかを単純に求める場合は、この演算フィールドで大丈夫です。


本来、InStr関数は、検索開始文字位置を、引数に一番目に設定しなければなりませんが、全角・半角を区別しない場合には、検索開始文字位置を省略することができます。


ただし、この場合、全角・半角の区別ができないことがわかります。


空白確認Bは、

空白確認B: InStr(1,[氏名]," ",0)


1番目の引数は、検索開始位置です。最初から対象としたいので「1」とします。


2番目の引数は、文字列。「氏名フィールド」なので[氏名]とします。


3番目の引数は、検索文字。半角空白なので「" "」


4番目の引数は、比較モード。0にすると、バイナリモードで比較することができますので、全角/半角、大文字/小文字、ひらがな/カタカナを区別することができます。


よって、S002は全角空白なので「0」と求められているわけです。


4番目の比較モードを使う場合には、1番目の引数は、省略することができません。


空白確認Tは、

空白確認T: InStr(1,[氏名]," ",1)

先ほどの、空白確認Bと違うのは、4番目の引数が「1」にしています。


「1」の場合は、テキストモードで比較します。

そのため、全角/半角、大文字/小文字、ひらがな/カタカナを区別することができません。


最後の、空白確認B2は、

空白確認B2: InStr(1,[氏名]," ",0)

比較モードを「0」のバイナリモードにしています。


そして、検索文字が全角空白にしました。


そのため、結果は、S002以外は、すべて0と求められていることが確認できます。