プロが教えるわが家の防犯対策術!

お世話になります。
Microsoft Accessについて質問です。

Microsoft365を使用しています。

クエリで抽出する際、フィールドAに含まれる文字によって条件分岐し
文字列の一部をフィールドBに抽出したいと考えています。
条件となる文字列は英数混在です。

例)
※条件1:文字列[cde]が含まれている場合、右から3文字抽出
※条件2:文字列[ijk]が含まれている場合、右から5文字抽出
※条件3:文字列[qr7]が含まれている場合、右から6文字抽出




[フィールドA]  [フィールドB]
abcdefg123    123
efghijk456      jk456
lmnopqr789    pqr789




様々検索し試してみましたが、思うような結果が出ません。
Accessに触れて日が浅いため、もしかすると的外れな手法なのかもしれません。
そもそもExcelでやれという話かもしれませんが、現在使用しているデータベース上で作業したく…

「同一クエリ内では不可であるが、別クエリを使用すれば可能」などあればそちらでも構いませんので、このような抽出をする方法があればご教示いただけますでしょうか。

以上、よろしくお願いいたします。

質問者からの補足コメント

  • うれしい

    皆さま有難うございます。
    こんなに早く沢山のアドバイスを頂けたことに驚いています。

    現在、皆さまに頂いたご提案を試している最中です。

    何名かの方に「条件の数」についてご指摘頂いておりますが、
    条件数はかなり多く、数十件有りますので、No4様の「別途条件テーブルを作成する方法」がフィットしているかもしれません。(現在試行中です)
    もし、これ以外にもよい方法が存在すればご教示頂けますと有難く存じます。

    ちなみに、希望している動作をExcel上で試した所、細かな条件分岐なため必然的に式の量が増え、ファイルがクラッシュしてしまいましたので、やはりAccess上での作業を希望しております。

    以上、皆さま引き続きアドバイスを頂けますと幸いです。

      補足日時:2021/09/26 16:28
  • ご回答頂き有難うございます。
    SQL文を自環境に合わせ試した所「aaaから循環参照が発生しています」のエラーダイアログが表示されました。
    考えられる原因またはエラーを無視する方法などあればご教示頂けますでしょうか。

    質問時例文を基に、自環境に合わせ下記のように代入し使用しました。

    条件テーブル
    ・テーブル名:bbb
    ・フィールド名1:fa(条件:[cde],[ijk],[qr7]…を入力)
    ・フィールド名2:fb(条件:faに対応する抽出桁数を入力)

    データテーブル
    ・テーブル名:aaa
    ・フィールド名1:f1(例文[フィールドA]:文字列を入力)
    ・フィールド名2:f2(例文[フィールドB]:抽出後データ表示用)

    当て嵌め方に誤りあればご指摘ください。

    以上、お願い致します。

    No.4の回答に寄せられた補足コメントです。 補足日時:2021/09/26 18:09

A 回答 (6件)

No.4です。



https://officek.net/access/a-query/aq-make/aqm-a …
フィールド名と演算フィールドの名称がダブっている場合のようですので、式を見直ししてみて下さい。
    • good
    • 0

#2さんが気にされてますけど条件の数が少なければ


フィールドB:式
式には
Switch(InStr([フィールドA],"cde")>0,Right([フィールドA],3),InStr([フィールドA],"ijk")>0,Right([フィールドA],5),InStr([フィールドA],"qr7")>0,Right([フィールドA],6))
としてみるとか・・・。
上記でヒットしない場合はNullが得られますが、
複数の条件でヒットした場合、
例 qr7ijk654321の(qr7、ijk)などについては
考えていません。
ご参考まで。
    • good
    • 0

No.2です。



条件の方は
・テーブル名:bbb
・フィールド名1:fa
・フィールド名2:fb

データの方は
・テーブル名:aaa
・フィールド名1:f1
・フィールド名2:f2

SQLビューで見ると
SELECT aaa.f1, Max(IIf(([f1] Like '*' & [fa] & '*'),right([f1],[fb]),"")) AS f2
FROM aaa, bbb
GROUP BY aaa.f1;

該当しないレコードの扱いがなかったので "" にしました。
「[Microsoft Access]クエ」の回答画像4
この回答への補足あり
    • good
    • 0

>>クエリで抽出する際、フィールドAに含まれる文字によって条件分岐し


文字列の一部をフィールドBに抽出したいと考えています。

なかなかAccessだけでは、うまく処理できないパターンだと思います。
通常、「Access VBAを使って ADOによるレコード操作」でコーディングすることになると思います。
    • good
    • 0

ほぼ未経験者ですけど。



条件数がどれ程あるのかわかりませんが多いのなら、
・条件
・文字数
を別のテーブルにしてそちらを参照し既出の方法で『右から何文字』と抽出できそうな気がします。

未検証ですけどね。
    • good
    • 0

「InStr」と「IIf」使えば同一クエリで行けると思います。

    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!