- ベストアンサー
クエリの関数の文字数オーバーになる問題
- 質問文章の内容は、Accsessでのクエリの関数の文字数がオーバーしていることです。
- クエリで作成した関数において、余分なタグが削除されず、Replaceを追加しようとすると文字制限を超えてしまいます。
- 質問者は、SQLとVBAのどちらを学ぶべきか迷っています。どのように対処すれば良いでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
それならこうすればどうでしょう? IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","",[T_shop_additional3]![tg6]) & MID(IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","<BR><BR>","") & IIF(TRIM("" & [C_html_text]![4_1])="","","<BR><BR>" & [C_html_text]![4_1]) & IIF(TRIM("" & [C_html_text]![4_2])="","","<BR><BR>" & [C_html_text]![4_2]) & IIF(TRIM("" & [C_html_text]![4_3])="","","<BR><BR>" & [C_html_text]![4_3]) & IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","","</FONT>"),9) Replaceは使わなくても済むなら使わない方がよいです(全体に対して改めて文字列走査を掛けるのは非効率です)。
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
Accessの場合、"X" & NULL は"X"になるはずですから、それを利用してNULLのケースと空白のケースを両方除外してみてはどうでしょう。 A,B,Cそれぞれがある場合にのみ"<BR><BR>"を前につけて結合すれば、A,B,Cすべてが値がない場合を除いては頭に不要な"<BR><BR>"が残ります。なので、A,B,Cすべてが値がない場合にもあえて"<BR><BR>"を補い、最後にMID関数で頭8文字を除きます。 [T_shop]![tg6] & MID(IIF(TRIM("X" & [A] & [B] & [C])="X","<BR><BR>","") & IIF(TRIM("X" & [A])="X","","<BR><BR>" & [A]) & IIF(TRIM("X" & [B])="X","","<BR><BR>" & [B]) & IIF(TRIM("X" & [C])="X","","<BR><BR>" & [C]),9) & "</FONT>" 少しは短くなりませんか?
お礼
上段と下段のお礼文面が入れ替わってしまいました。 1日過ぎ朝より考えてみた結果理解が出来ました。 今日もまたスマートな関数式を見て感動しております。 MID・IIF・TRIMの利用の方法がとても参考になりました。 学生時代の数学を思い出しプラスとマイナスの考え方を利用できるということ理解させていただきました。 今後とも宜しくお願いいたします。 ありがとうございました。
補足
早速のご回答誠にありがとうございました。TRIMの複数指定とIIFの連結とても勉強になりました。総タグ数もかなり減りました。試してみました結果、出来ました。ありがとうございました。 Accessが初心者のためまだFormまで作成して下りません。HTMLの総タグ数が多いため8分割にしクエリでnullのblockを除きタグを1つ[tg_all]に結合しCSVで出力を手動で行っている段階です。 しかし、また新らたな問題点が発生してしまいました・・・・・・・・・・・ 問題点 A+B+C=""の場合、全体に[tg6]と</FONT>を連結するので当たり前ですが、最終的に<FONT COLOR="#00FF66" SIZE="5"></FONT>が残ってしまいます。 最終形(総タグの結合) tg_all: [block1] & [block2] & [block3] & [block4] & [block5] & [block6] & [block7] & [block8] 先頭にReplaceつけて削除できるのですが、定期的に#00FF66→#33FFCCなどと入れ替えたいので[T_shop]![tg6] と"</FONT>"も関数式の中に含めたいのです。 現状 block4-1: Replace([T_shop_additional3]![tg6] &MID(IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","<BR><BR>","")& IIF(TRIM("" & [C_html_text]![4_1])="","","<BR><BR>" & [C_html_text]![4_1]) & IIF(TRIM("" & [C_html_text]![4_2])="","","<BR><BR>" & [C_html_text]![4_2]) & IIF(TRIM("X" & [C_html_text]![4_3])="X","","<BR><BR>" & [C_html_text]![4_3]),9) & "</FONT>","<FONT COLOR=""#00FF66"" SIZE=""5""></FONT>","") [T_shop]![tg6]&A&B&C=[T_shop]![tg6]="","" にしたいのですが、出来ません。 どのようにすればよろしいのでしょうか??? あと一捻りアドバイスをお願い出来ますでしょうか??? 宜しくお願いいたします。
お礼
出来ました。しばらくの間感動してぼーとする時間が有りご連絡遅くなりました。 とてもシンプルでスマートな関数に出来るのですね。 まだ貼り付けの継ぎ足し関数でしか理解できないためReplaceの古活用をしております。 クエリがかなり多いのでこの関数を使って簡略化させて頂きます。 また不明な箇所など有りましたらアドバイス宜しくお願いいたします。 このたびは、ありがとうございました。
補足
何度も申し訳ございません。 初回の<BR>をつけMID関数で削除後、[tg6]と</font>を結合してするまでは理解しておりますが、よくよく考えてみても今回の追加文でどうしてすべてが空白の場合、[tg6]と</font>が削除されるのかが理解できないのですが・・・ 1.IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","",[T_shop_additional3]![tg6]) 2.& IIF(TRIM("" & [C_html_text]![4_1] & [C_html_text]![4_2] & [C_html_text]![4_3])="","","</FONT>"),9) 置換え 1-1.IIF(TRIM("" & [A] & [B] & [C])="","",[T_shop]![tg6]) 2-1.IIF(TRIM("" & [A] & [B] & [C])="","","</FONT>"),9) A+B+Cのすべてが空白もしくはnullの場合は、""ですから入力分は[tg6] "<FONT COLOR=""#00FF66"" SIZE=""5"">"は、""になってしまう。 大変お手数ですが、アドバイスお願いしたいのですが、 宜しくお願いいたします。