Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Access 2019)
クエリで改行後の文字を抽出
投稿日時: 22/03/01 11:46:26
投稿者: ラングドシャ

お願いします。
 
テーブルのデータが次のようになっています。
 
フィールド名:NAIYO
耐熱60度
サイズ20×20cm
赤、黒、白
 
3行にわたってデータが入っています。それぞれエンターにて改行しています。
クエリにて3行目を抽出するために、以前こちらで教えていただいた関数で抽出しています。
 
カラー: Mid([NAIYO],InStr(InStr(1,[NAIYO],Chr(13)+Chr(10),0)+1,[NAIYO],Chr(13)+Chr(10),0)+2)
 
今回、1行目も抽出したいので、上記を応用して次のように作ってみました
 
仕様: Mid([NAIYO],1,InStr(1,[NAIYO],Chr(13)+Chr(10),0)+1)
 
 
これで通常は問題ないのですが、元のデータが1行目しかない場合次のように抽出されてしまいます。
 
フィールド名:NAIYO
耐熱60度
 
 
の場合、

カラー     詳細
熱60度     耐

 
1行目抽出のために作成した関数にあやまりがありますでしょうか?
1行目しかなくても抽出できるようご教示お願いいたします。

回答
投稿日時: 22/03/01 14:54:52
投稿者: Suzu

私なら、VBA で Split を含んだ 自作関数を作り その関数を クエリに仕込みます。
 
 
 
そもそもの テーブル構造に問題があると思います。
 
普通に、属性毎にフィールドに分けていればそんな事をしなくて済みますよね。
 
1行あるのか、2行あるのか、3行あるのか ・・etc
改行を入れる事自体を ユーザーに委ねており、「仕様」は必ず3行目 に 来るとは限らない
そういう あいまい になりかねない 部分を 明確にする為 に フィールドとして分けています。
 
 
あくまでも、ACCESS の クエリの関数のみで なら、
InStr にてChr(13) & Chr(10) の数を数え 分岐させます。

回答
投稿日時: 22/03/01 15:09:50
投稿者: sk

引用:
3行にわたってデータが入っています。それぞれエンターにて改行しています。

引用:
1行目も抽出したい

引用:
Mid([NAIYO],1,InStr(1,[NAIYO],Chr(13)+Chr(10),0)+1)

IIf(InStr(1,Nz([NAIYO],""),Chr(13) & Chr(10),0)>0,Left([NAIYO],InStr(1,Nz([NAIYO],""),Chr(13) & Chr(10),0)-1),[NAIYO])
 
------------------------------------------------------------
 
以上のような式を記述なさればよろしいのではないかと。

回答
投稿日時: 22/03/01 17:06:32
投稿者: よろずや

仕様: Mid([NAIYO],1,InStr(1,[NAIYO] & Chr(13),Chr(13),1)-1)
 
サイズ: Mid([NAIYO],InStr(1,[NAIYO] & Chr(13),Chr(13),1)+2,InStr(InStr(1,[NAIYO] & Chr(13),Chr(13),1)+1,[NAIYO] & Chr(13) & Chr(10) & Chr(13),Chr(13),1)-InStr(1,[NAIYO] & Chr(13),Chr(13),1)-2)
 
カラー: Mid([NAIYO],InStr(InStr(1,[NAIYO] & Chr(13),Chr(13),1)+1,[NAIYO] & Chr(13) & Chr(10) & Chr(13),Chr(13),1)+2)

トピックに返信