• 締切済み

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

  • ACCESSの条件付書式

    アクセスのデータシートビューで条件付書式ができるのは フォームをデータシートビューで表示したときだけでしょうか? テーブルやクエリでは ツールバーに「書式→条件付書式」は表示されませんが フォームのデータシートビューを開いている時のみ、 「書式→条件付書式」が表示されます。 テーブルやクエリでも条件付書式を設定できる方法があれば教えてください。 よろしくお願いします。

  • アクセス サブフォーム条件付き書式の反映が若干遅い

    アクセスのフォームの中のサブフォーム条件付き書式を設定しています。 サブフォームにはテーブルのデータが紐づいております。 フォームを開いたと同時に条件付き書式に色付けがサブフォームに行われるようにしたいのですが フォームを開いただけだと色が付かず、サブフォームのどこかのレコードをクリックしたら色が付きます。 もしくは、フォーム上でマウスを動かすと色が付きます。 デザインビューでサブフォームに条件付き書式を設定しているので サブフォームを開くと同時に色が付くし、 サブフォーム単独で開くと、すぐ色が付きます。 親フォームを開いたと同時にサブフォームの条件付き書式を反映させる方法はありますか? アクセス2010です。 ご教授よろしくお願いします。

  • アクセス2000の条件付書式で

    フォームに[旧・日付]と[新・日付] というコントロールを配置しています。 この二つのデータを比較し、値が一致しない場合は条件付式書式で[新・日付]に背景色をつけたいと思っています。 そこでツールの書式→条件付書式で 式   [旧・日付]<>[新・日付] 背景色 ピンク と設定しました。 ところが[旧・日付]にデータが入力されている場合はうまくいくのですが、[旧・日付]が空欄で、[新・日付]のみデータがある場合は認識してくれません。 どのように設定したらうまくいくのでしょうか。 よろしくお願いします。

  • Accessフォーム条件付書式

    どなたか教えて下さい。 Access2002を使っています。 フォームの条件付書式を使い売上が100000円以上なら赤に背景色を変えようと思っています。 VBAの勉強の為に、ツールバーの条件付き書式を使わずにvbaで挑戦してみました。 Private Sub Form_Open(Cancel As Integer) If Me.売上.Value >=100000 Then Me.売上.BackColor = RGB(255, 0, 0) End If End Sub 単票形式ならば上手くいくのですが、フォームのデータシートタイプで表示すると反応しません。 但し、ツールバーの条件付き書式からの設定ではデータシートでも反応します。 上記のIF文では条件付書式にはなっていないのでしょうか? helpでDatasheetBackColor プロパティというのを探せましたが、全体の背景色の変更になってしまいます。 ツールバーにあるからには、VBAで出来るだろうと考えるのは間違えでしょうか? もしもデーターシートの条件にあったセルのみ背景色をvbaで変えられることを知っている方、よろしくお願いします。 haru

  • ACCESSの条件付書式について

    カテゴリフィールドには、3つのカテゴリが存在します。 「重要」「情報共有」「緊急」です。 そのフィールドはルックアップ列を用いてテーブルに入力されています。 そのテーブルから、サブフォームを作成し、一覧を表示させているのですが、「重要」や「緊急」のカテゴリのときだけ、色をつけたいのです。 ・・・が。条件付書式がうまくいきません。 IIF([カテゴリ]="重要",TRUE,FALSE) のように設定したりしてるのですが、うまくいきません。何が間違っているのでしょうか。 もし他の条件式などでうまく行くようであれば、そちらでもかまわないのですが、教えていただけますでしょうか。

  • サブフォームに条件付き書式 開いたらちらつく

    アクセスで、サブフォームに条件付き書式を設定しているフォームを他のフォームから開くと、 どこかのコントロールをクリックするまでずっと画面がちらつきます。 win7・オフィス2010ですが、これは仕様でしょうか? どこかのコントロールを触ったり、マウスカーソルを動かすと、ちらつきが解除されます。

  • 条件付書式・・・?

    いつもお世話になってます。 アクセスのフォームで日付のテキストボックスがあるんですが、 その背景を日にあわせて自動的に変えたいと思います。 ・一ヶ月前の間 → 黄色 ・今月中    → 赤 条件付書式でできそうな気がするんですが、具体的な設定の仕方が わかりません。教えて下さい。 宜しくおねがいします。 アクセスは2000を使っています。

  • Accessの条件付書式の使い方

    Acccess2003を使っています。 フォームの条件付書式で、『性別』という項目があって、女性と男性を選ぶことができます。 他の項目を性別によって入力の必要のないものは『非有効』の状態にするにはどのようにするにはどのようにするのでしょうか? Excelのように『式』に変えて『性別 = "男"』としたのですがダメでした・・・。 式の記入方法か、説明が載っているサイトを教えてください。

  • EXCEL2003 条件付書式が狂ってくる

    条件付書式は、見ためにどのセルに入っているのかわからないというのと、複数の条件付書式が入ると、なぜかその前に決めていた条件付書式が消えてしまっているということがあって、なかなか不便に思っています。(やりかたが悪いのかもと思うのですが) それで、VBAの entireculumn というのを見つけたのですが、 これで対応できるでしょうか? やりたい事は、 1 2*--------------------------- 3*--------------------------- 4 5 6*--------------------------- 7*--------------------------- 上記のように、「*」をつけた行にだけ、行全体に色をつけておく、 というのを条件付書式で、 「数式が」「=$A1="*"」 としたもので、その設定をしているシートに、横にずっと、いろんな関数を入れていってます。 ですが、関数を入れたり、そのプロセスで列挿入などすると、 色がずれてしまうのです。 その回避策として、VBAで最初に色の設定をしておけないでしょうか? 「*がある行だけに色をつける。」 よろしくお願いします。

  • サブフォームの条件について(アクセス2003)

    アクセス2003で入力フォームを作成しています。入力フォーム上には、売上日「2009/07/30」とその詳細を入力します。このフォーム上にサブフォームの過去6回分の売り上げデータも表示します。ここで、このサブフォーム上に同じ売り上げ日「2009/07/30」が表示されるのですが、この日の分は2重表示になるので省きたいと考えています。クエリの条件のところで、売上日:<Date()としてとりあえず、今日入力して今日のうちに印刷すれば、サブフォーム上は「7/30」分は表示されないのですが、これが明日「7/31」になると入力フォームの売上日は「7/30」でサブフォーム上の売上日も「7/31」より前の「7/30」なので両方表示されてしまいます。当日中に印刷までしてしまえばよいといわれればそれまでなのですが、それでは不便です。フィルタの非選択フィルタを使おうとも思ったのですが、いろいろな人が入力操作するので、なるべく簡単にできたらと思います。 どなたかよい方法を教えてくださいませんか?よろしくお願いいたします。

専門家に質問してみよう