- 締切済み
Access クエリ 文字列の一部を抽出して表示
Access クエリの 文字列の一部だけの抽出についてお尋ねします。 Accessクエリにて、『配達先』フィールドの文字列が長いため、『配達先』フィールドの一部の文字を抽出してクエリに表示したいのですが、どのようにすればよろしいでしょうか? 抽出前 ⇒ 抽出後の順で記載します。 (1):営業部○○課消耗品置き場 ⇒ ○○課 ※○○課消耗品置き場で終わる文字列の場合は、営業部の1字後ろから消の1字手前までを抽出する (2):営業部○○課消耗品置き場(△△係)⇒ △△係 ※○○課消耗品置き場の後に()がある場合は、()の中の文字列だけを抽出 (3):営業部◇F○○課消耗品置き場 ⇒ ○○課 営業部◇F○○課(△△係)⇒ △△係 ※○○課の前に◇F(フロア)がある場合は、◇Fの後ろから(1)か(2)を適用する お分かりの方がいらっしゃいましたら、ご回答のほどよろしくお願い申し上げます。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- chayamati
- ベストアンサー率41% (260/624)
>(1):営業部○○課消耗品置き場 ⇒ ○○課 (2):営業部○○課消耗品置き場(△△係)⇒ △△係 (3):営業部◇F○○課消耗品置き場 ⇒ ○○課 ★もしこれらの処理がExcelで出来るなら、 変換の結果をAccessにインポート
- chayamati
- ベストアンサー率41% (260/624)
Excelで文字列操作関数を駆使して、お考えのような処理が出来たのでしょう。 AccessにはSEARCH関数、FIND関数は文字列操作関数はありません。あるのは演算子の& 添付図をご覧ください 可能なら他の方が仰っているように、顧客マスタのテーブル設計から再挑戦されませんか puku_oh_pu様の提案の「配達先略称」もいただきです 得意先マスタ ・ID ・配達先略称 ・顧客名(肩書も含めて入力) ・顧客部名 ・顧客課名 ・ご担当名(ご担当名に様、殿、御中等の)敬称も入力します ・登録日 ・最新取引日 クエリで横の演算ができます フィールド欄に 配達先:[顧客名]&[顧客部名]&[顧客部名&[ご担当名] ・登録画面は[配達先略称]を使い 先方への書類は郵便番号、住所を含めて配達先を使います
- puku_oh_pu
- ベストアンサー率47% (47/99)
テーブル『配達先』のレコード数はいくつあるのでしょうか? (『配達先』は何か所あるのでしょうか?) 100ぐらいなら、新しくテーブル『配達先略称』等を手入力で作ったほうが早いと思います (あるいは既存のテーブルにフィールド『配達先略称』を追加)
- bardfish
- ベストアンサー率28% (5029/17766)
文字列の中から特定の文字を抜き出すことが可能な関数はあったはずですが一つでは無理っぽい?関数のパラメーターに関数を入れるとかしないと駄目かな?そうするとクエリーを開くときにものすごい時間がかかりそう。もしくはエラーで開けないか。 私なら・・・ですが、VBA(モジュール)で欲しいデータが入っているテーブルから作業用の類似した構造のテーブルへ該当レコードをコピーする関数を作ります。 そのほうがクエリーでは実現不可能な抽出条件にも柔軟に対応できますからね。 文字列の中から特定の文字列の位置を返す関数:InStr() 文字列の中の特定の位置から文字列を取り出す関数:Mid$() もし列の中の指定位置の文字を任意の文字に置き換える関数:あったかな? ネットを検索すればVBA(モジュール)でデータベース内のテーブルのオープンのやり方とかレコード操作などの関数の使い方が見つかると思います。 Dim DB As Dtaabase Set DB = CurrentDB() って感じでデータベース(*.mdb)を開いてその中のオブジェクト(テーブル)をSQLで記述して開いてTabel.MoveNextで次のレコードに移動してカレントレコードのField(列)の値を参照したりする。 列の値を更新するときは・・・そういうデータベース操作系のステートメントがあったと思う。 クエリーで可能だったとしても、抽出処理に物凄く時間がかかるかもしれない。数十分とか言うレベルではなく最低でも数時間・・・とか?もしかしたら数日かかるかもしれない。だったらモジュールぶプログラム組んだほうが速い。 そもそもの話になりますが、テーブルの設計に失敗していると思います。 エクセルの感覚でテーブルを作成してしまうとこういう事になりやすい。作ったときはそれで問題ないと深く考えていないんだと思いますが、どのように活用するか詳しくリサーチしておかないと後々苦労することになってしまいます。