ここから本文です

【Access】全角スペースが2つ以上ある値だけを抽出したいが余計なのが表記されて...

nag********さん

2019/7/3100:43:49

【Access】全角スペースが2つ以上ある値だけを抽出したいが余計なのが表記されてしまう

※以下
□=全角スペース
_ = 半角スペース

Accessで全角スペースが入ってしまっているデータを抽出したいです。

対象のフィールドには人名が入っており
【苗字】□【名前】といった風に
苗字と名前の間には全角スペースがはいっております。

しかし一部の名前が欠けて、その部分に全角スペースが入っている異常なデータがありました。

※例
正:山田□太郎

異常:□田□太郎


上記のように欠けてしまっている値を抽出したく、条件抽出に

【LIKE "*□*□*"】と入力して、

「□田□太郎」の様な異常な値を抽出することができたのですが、、、
出力結果にはそれ以外にも

「田中□ジェームズ」や「斎藤□トーマス」といった
「ー」が含まれる値が出力されたり

「安藤__直美」といった
半角スペースが二つ入った値が出力されてしまいます。

出力させたいのは全角スペースが二つ以上あるデータだけなのですが、、、
なぜこうなってしまうのでしょう。
どなたか助けてください!

閲覧数:
38
回答数:
2

違反報告

ベストアンサーに選ばれた回答

tom********さん

2019/7/3108:44:29

ワイルドカード「*」を使用しているから当然の結果です。そもそもAccessは全角半角の区別をさせるにはそれなりの仕込みをしないと単純にはいきません。
とりあえずの方策(かっこ悪いけど)です。
選択クエリを作成し「人名」を引いてきます。
クエリーのデザイン表示で次の二つの式を入力します。
式1: InStr(1,[人名]," ",0) 「人名」の右隣
式2: InStr([式1]+1,[人名]," ",0) さらにその右隣

Instr()関数を使用し該当文字の位置を探します。
頭の1と[式1]+1は何文字目から探すかを指定。
" "に注意の空白には全角スペースをいれてください。これが探す文字です。
最後の0は文字コード順に比較するための定数です。これで全角半角が区別されます。
全角スペースがなければ式1,式2には0が表示されます。
全角スペースが一個だけなら式1にその位置が表示されます。式2は0。
全角スペースが二個なら式1と式2にそれぞれ位置が表示されます。

かっこは良くないですが、とりあえずの目的は達成できるかと・・・。

  • 質問者

    nag********さん

    2019/7/3110:41:48

    ありがとうございます!
    対象のレコードの区別はできたみたいです!

    ただすいませんがもう一点教えてください。
    式2の抽出条件に<>0と記入して全角スペースのあるレコードを抽出しようとしたのですが、「式1の値を入力してください」と出てしまい、うまく活きませんでした。
    どうしたら0以外のものを出せるでしょうか、、、?

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/8/1 00:05:23

ありがとうございます。
うまくいきました!
他の方もご助言ありがとうございます。
愛しております。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

hat********さん

2019/7/3111:06:04

半角空白も抽出される件については、Like演算子では半角、全角を区別しませんので、そうなるのは仕様です。

長音を含むものが抽出されるのは、バグだと思います。下記参照。

長音「ー」を含むデータをクエリであいまい抽出すると - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-455.html

対処方としては、前の回答者の方法か、下記のような方法になります。

フィールド: Len([氏名])-Len(Replace([氏名],"□","",1,-1,0))
抽出条件: >=2

Replace関数で全角空白を削除して、削除前の文字長から削除後の文字長を引いた値で全角空白の個数を取得します。抽出条件でそれが2以上を抽出します。

あるいは、VBAでユーザー定義関数を作成してしまうという方法もあります。
下記のページの後の方に関数を紹介しています。

クエリで大文字/小文字、全角/半角を区別して文字列比較をしたい - hatena chips
https://hatenachips.blog.fc2.com/blog-entry-399.html

これを使うと下記のように簡単に記述できます。

フィールド: LikeB([氏名], "*□*□*")
抽出条件: True

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる