Access。クエリ。空白を見極める:全角・半角の違いもInStr関数でスマートに判定
<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と求められていることが確認できます。