こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

access2000を使用しています。

検索用のフォームを作成、その中に帳票式のフォームをサブフォームとして設定し、
任意の文字列でフィルターをかけられるようにしています。

しかし、サブフォームの中には、重複して表示される項目が多く、見づらいため
サブフォームに"重複データがあった場合はその項目について背景色と同じにする"という
条件付書式を設定しました。

しかし、いざフィルターをかけてサブフォームに表示される項目を絞ってしまうと、
ところどころ背景色と同じ色になっている項目(重複している項目)については
読み取ることができません。

これを回避するために、フィルターの結果に対して、条件付書式を適用するような
方法はありますでしょうか。

投稿日時 - 2008-06-25 11:11:51

QNo.4127748

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(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 などで実行しても良いと思います。

投稿日時 - 2008-06-26 08:26:20

お礼

丁寧に記載いただき、ありがとうございます。

今までSQLをきちんと理解しようとしていなかったので、
[イミディエイト]がなんなのか?という根本的な
ところすらわかりません。

まずはそこから勉強せねばなりませんね。
せっかくなので、もう少し勉強してみて、理解したいと思います。

投稿日時 - 2008-06-26 11:47:38

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 請求明細;

し、しかし、これって開発者のいわゆるマスターベーション。
ユーザは「そんなものか」で受け入れると思いますよ。

投稿日時 - 2008-06-25 11:47:05

お礼

やはりむずかしいのですね。

どうしても必要かと問われると、そうでもない機能なので、
最悪は、我慢してもらえばよいかなと思います。

ただ、がんばってサブフォームに条件付書式を設定したのに
なんだか諦められなくて・・・

フォーム検索の結果を別テーブルに一時的に保存する方法は
どのようなものになるのでしょうか?

投稿日時 - 2008-06-25 19:23:34

あなたにオススメの質問