- ベストアンサー
Accessチェックボックス項目のデータをレポートに表示する方法
- Accessでデータにチェックボックス項目を使用している場合、レポートで判定があった項目のみ抽出して表示する方法を解説します。
- 現在の状況では、テキストボックスのコントロールソースにチェックボックス名を入力しても、判定結果の"-1"が表示されます。この問題を解決し、フィールド名を表示する方法を紹介します。
- Accessでチェックボックス項目のデータをレポートに表示する方法を学ぶために、マクロビルダーで作成している範囲を超えて進めるために、VBAの学習が必要です。VBAの基本的な知識を習得することで、フィールド名を表示させることができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ようやく質問の内容がつまびらかに なってきたようなので。 >7か所のチェック項目があります。 >このレポートにて「備考」項目に「ACD」 ということで、私の回答はあえてVBAを使わない方法で。 私のNo2の回答の2番目のところで、判定というところを備考 とすれば、 備考: IIf([赤]=True,"赤","") & IIf([青]=True,"青", "") & IIf([緑]=True,"緑","") というように置き換えてください。つまりここでは3つの チェックのフィールドについてかいていますが、7つの場合 は上記の書き方に準じて文字列を足してください。
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1719/2589)
> 上のようなことがマクロビルダーでできるとありがたいのですが…。 マクロからVBAを実行する方法になりますが テーブルに備考というフィールドがあるとして VBAの標準モジュールに以下のコードを作成し レポートの開く時のマクロで プロシージャの実行 プロシージャ名 「Test()」 として試してみてください。 対象はQ_TESTという選択クエリにしていますので実際のものに変更してください。 ":"を備考欄に記載するフィールド名の区切りにしていますので適当に変更してください。 テーブルの備考も変更されます。 Function Test() Dim db As Database Dim rs As Recordset Dim i As Long Dim mStr As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_TEST") rs.MoveFirst Do Until rs.EOF = True rs.Edit rs!備考 = Null mStr = "" For i = 0 To rs.Fields.Count - 1 If rs.Fields(i).Type = dbBoolean And rs.Fields(i).Value = True Then mStr = mStr & rs.Fields(i).Name & ":" End If Next rs!備考 = mStr rs.Update rs.MoveNext Loop Set rs = Nothing Set db = Nothing End Function もしくは、開く時のコードビルダーで以下ができますので上記の内容をそこに入れてください。 Private Sub Report_Open(Cancel As Integer) ここに Dim db As Database から Set db = Nothing までを入れる End Sub
- piroin654
- ベストアンサー率75% (692/917)
質問からの情報量が少ないので推測で回答 してみます。回答は二つの場合について 回答してみました。 例えば以下のようなテーブルだとします。 ID 名称 赤 青 緑 1 ミドリ号 No No Yes 2 アカダマ号 Yes No No 3 ブルーライン号 No Yes No テーブルの構造は ID オートナンバー 名称 テキスト型 赤 Yes/No型 青 Yes/No型 緑 Yes/No型 です。適当に作っていますが。 質問ではチェックが入っている場合はそのフィールドの フィールド名を表示したいということなので、この テーブルをもとにクエリを作成します。 クエリは以下のような構造ですが、 フィールド ID 名称 F3 F4 F5 テーブル テーブル1 テーブル1 表示 ☑ ☑ ☑ ☑ ☑ ここでF3、F4、F5は内容が長いので それぞれ赤、青、緑なのですが、F3、F4、F5にはそれぞれ 以下で置き換えます。内容が長いのではみ出すので このような手順にしています。 F3 赤色: IIf([赤]=True,"赤","") F4 青色: IIf([青]=True,"青","") F5 緑色: IIf([緑]=True,"緑","") つまり、F3というフィールド名を 赤色: IIf([赤]=True,"赤","") という文字列に置き換えます。以下F4、F5も同様にそれぞれの 文字列で置き換えます。 ここで赤色を赤にしたいところですが、この場合は同じにすると 循環参照というエラーが生じAccessの規則に反します。そのために あえて赤というフィールド名を赤色というフィールド名に しています。この辺りはまた勉強してみてください。 したがって(変な言い回しですが)F3、F4、F5は直接テーブルの 値を表示していないということで参照するテーブル名は表示しません。 作成したクエリを表示すると、 ID 名称 赤色 青色 緑色 1 ミドリ号 緑 2 アカダマ号 赤 3 ブルーライン号 青 というようになり、このクエリをもとにレポートを作成すると 同様のデータを表示するレポートができます。 もう一つは、チェックのフィールドを一つにする場合、 つまり赤色、青色、緑色のフィールドをそれぞれに表示する のではなく、例えば判定というフィールドに表示する、 ID 名称 判定 1 ミドリ号 緑 2 アカダマ号 赤 3 ブルーライン号 青 のようにしたい場合は、クエリの構造を以下のように します。 フィールド ID 名称 F3 テーブル テーブル1 テーブル1 表示 ☑ ☑ ☑ 同様にしてF3を以下の文字列で置き換えます。 判定: IIf([赤]=True,"赤",IIf([青]=True,"青",IIf([緑]=True,"緑",""))) このIIfを使う方法は対象となるチェックボックスの数によって 二つの方法とも条件を増やしていかなくてはなりません。 そのあたりは私の推測でいいのならばどちらの方法を とるのか、あるいは具体的にチェックボックスのフィールド の数はいくつあるのかわかれば特に二番目の方法は かっこの数を間違えないようにする必要があるので 示してもらえばと思いますが。
- kkkkkm
- ベストアンサー率66% (1719/2589)
フィールドの値ではなくフィールド名を取得してレポートするのでしょうか。 フィールドの値ならクエリでチェックボックスの抽出条件をTrueにすればチェックの入ったレコードだけ抽出できますが…。 > データにチェックボックス項目が数か所あります。 これだけでは、データがどのようになっているのかがよく分かりませんから、他の方の質問を参考にしてデータの例を出した方がいいと思いますよ。
補足
回答ありがとうございます。 また、わかりづらい質問に親身に答えて下さり感謝致します。 補足致します。 フィールド値ではなく、フィールド名を拾いたいです。 また、7か所のチェック項目があります。 その7か所のうち複数個所チェックされたときに、 その判定結果を例えば「備考」フィールドがあったとして、 そこに落とし込みたいです。 例:A~Gのチェック項目があったとして テーブルでACDと3項目チェックされたとします。 このレポートにて「備考」項目に「ACD」と表示させたいです。 上のようなことがマクロビルダーでできるとありがたいのですが…。
補足
回答ありがとうございます。 また、わかりづらい質問に親身に答えて下さり感謝致します。 回答者#1様に例を挙げさせていただきました。 #2様の内容を拝見させていただきまして、 私のやりたい事が少し近いような気がします。 これをヒントに少しいじってみたいと思います。 またわからない事がありましたら宜しくお願い致します。