• 締切済み

accessのサブフォームフィルターの結果に対して、条件付書式を適用する方法

access2000を使用しています。 検索用のフォームを作成、その中に帳票式のフォームをサブフォームとして設定し、 任意の文字列でフィルターをかけられるようにしています。 しかし、サブフォームの中には、重複して表示される項目が多く、見づらいため サブフォームに"重複データがあった場合はその項目について背景色と同じにする"という 条件付書式を設定しました。 しかし、いざフィルターをかけてサブフォームに表示される項目を絞ってしまうと、 ところどころ背景色と同じ色になっている項目(重複している項目)については 読み取ることができません。 これを回避するために、フィルターの結果に対して、条件付書式を適用するような 方法はありますでしょうか。

みんなの回答

noname#140971
noname#140971
回答No.2

Q、フォーム検索の結果を別テーブルに一時的に保存する方法は? A、それ自体は簡単ですが、重複を空白に変更するとなると少々・・・。 [イミディエイト] ? CNNExecute("DELETE * FROM [請求明細サブフォーム用一時テーブル]") True ? CNNExecute("INSERT INTO [請求明細サブフォーム用一時テーブル] SELECT * FROM 請求明細") True 請求明細サブフォーム用一時テーブル: [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2___A0001____________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4___A0002____________________2___B________\200______1 この場合は、[明細番号]が連続しています。 で、上述のINSERT文を多少加工します。 INSERT INTO   SELECT 明細番号,       IIf(DBCount("*","請求明細","明細番号<" & [明細番号] & " AND 明細台帳_請求番号='" & [明細台帳_請求番号] & "'")=0,[明細台帳_請求番号],""),       行番号,       商品名,       単価,       数量   FROM 請求明細; これで、一時テーブルは重複している[明細台帳_請求番号]=空白で生成されます。 請求明細サブフォーム用一時テーブル: [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2____________________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4____________________________2___B________\200______1 ここでは、更新クエリとかは使用していません。 VBコードで高速処理することを考慮してのことです。 ※いずれにしろ SQL文で全てを処理しようということです。 ※私は用いたことがありませんが DoCmd.RunSQL SQL などで実行しても良いと思います。

misa0928
質問者

お礼

丁寧に記載いただき、ありがとうございます。 今までSQLをきちんと理解しようとしていなかったので、 [イミディエイト]がなんなのか?という根本的な ところすらわかりません。 まずはそこから勉強せねばなりませんね。 せっかくなので、もう少し勉強してみて、理解したいと思います。

noname#140971
noname#140971
回答No.1

Q、サブフォームに条件付書式を適用する方法。 A、ありません。 大体、サブフォームってマルチ行デザインはサポートされていないです。 ですから、そういうアイデア自体を諦めるのが一番です。 で、どうしてもであれば<一時テーブル>を作成するなどして対応。 [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2___A0001____________________2___B________\200______1 ________3___A0002____________________1___A________\100______1 ________4___A0002____________________2___B________\200______1 [明細番号]_[明細台帳_請求番号]_[行番号]_[商品名]_[単価]_[数量] ________1___A0001____________________1___A________\100______1 ________2____________________________2____________\200______1 ________3___A0002____________________1___A________\100______1 ________4____________________________2____________\200______1 もちろん、クエリで重複を空白に変えることも不可能ではありません。 表示請求番号__明細番号__明細台帳_請求番号 A0001________________1__A0001___________1 _____________________2__A0001___________2 A0002________________3__A0002___________1 _____________________4__A0002___________2 SELECT IIf(DBCount("*",          "請求明細",          "明細番号<" & [明細番号] & " AND 明細台帳_請求番号='" & [明細台帳_請求番号] & "'")=0,          [明細台帳_請求番号],"") AS 表示請求番号, * FROM 請求明細; し、しかし、これって開発者のいわゆるマスターベーション。 ユーザは「そんなものか」で受け入れると思いますよ。

misa0928
質問者

お礼

やはりむずかしいのですね。 どうしても必要かと問われると、そうでもない機能なので、 最悪は、我慢してもらえばよいかなと思います。 ただ、がんばってサブフォームに条件付書式を設定したのに なんだか諦められなくて・・・ フォーム検索の結果を別テーブルに一時的に保存する方法は どのようなものになるのでしょうか?

関連するQ&A

専門家に質問してみよう