アクセスレポートの空白行の非表示について

このQ&Aのポイント
  • Access2016を使用しています。下記のような構造のテーブル(T_討論会)があり、これをレポート(R_討論会)に出力しています。
  • 質問日、質問者、質問事項、質問詳細1はグループ化していて、質問詳細2、説明者は詳細セクションに配置しています。
  • 「希望の表示レポート」の作成方法を教えてください。
回答を見る
  • ベストアンサー

アクセスレポートの空白行の非表示について

 Access2016を使用しています。  下記のような構造のテーブル(T_討論会)があり、これをレポート(R_討論会)に出力しています。  今は「現在のレポート」のようになっていますが、「希望の表示レポート」のようにしたいと思いますが、やり方が分かりません。  質問日、質問者、質問事項、質問詳細1はグループ化していて、質問詳細2、説明者は詳細セクションに配置しています。  簡単な説明で申し訳ございませんが、どうかご教示をお願いいたします。 【テーブル名】T_討論会 質問日       質問者  質問事項  質問詳細1 質問詳細2 説明者 平成30年3月2日(金) 質問者A AAAAA あああああ       ネズミ 平成30年3月2日(金) 質問者A AAAAA いいいいい       ウシ 平成30年3月2日(金) 質問者A AAAAA ううううう アアアアア トラ 平成30年3月2日(金) 質問者A AAAAA ううううう イイイイイ ウサギ 平成30年3月2日(金) 質問者A BBBBB えええええ       タツ 平成30年3月2日(金) 質問者A BBBBB おおおおお       ヘビ 平成30年3月2日(金) 質問者A BBBBB かかかかか ウウウウウ ウマ 平成30年3月2日(金) 質問者A BBBBB かかかかか エエエエエ ヒツジ 平成30年3月2日(金) 質問者A BBBBB かかかかか オオオオオ サル

  • ankle
  • お礼率43% (80/182)

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.11

No10です。 説明漏れがあったので追加しておきます。 もし「ID」を使うのであれば、「並び替え/グループ化」のプロパティを 表示し、「フィールド/式」に「ID」を表示し、「並び替え順序」を「昇順」 にしてください。「ID」にグループヘッダーは設定しません。「昇順」 だけを設定します。 >(2) >レポートの「詳細」にある「質問詳細2」と「説明者」の二つのテキスト >ボックスをコピーし、テキストボックス「質問詳細1」がある同じ >「質問詳細1.ヘッダー」に貼り付け、それぞれの名前を「txt質問詳細2」 >と「txt説明者」としてください。上下の並びはそれぞれ揃えておいて >ください。 のところで、「txt質問詳細2」と「txt説明者」のコントロールソースは それぞれ「質問詳細2」と「説明者」のコントロールソースと同じです。 コピーし貼り付け、名前を変えただけなので当然ですが。 以上です。

その他の回答 (10)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.10

一向に解決しないようなので、回答しておきます。 (1) 準備として「T_討論会」にオートナンバーのフィールドを追加しておいてください。 これはデータの並びを確保するためです。主キーである必要はありません。もし 類似するフィールドがあるならば必要ありませんが。 (2) レポートの「詳細」にある「質問詳細2」と「説明者」の二つのテキストボックスを コピーし、テキストボックス「質問詳細1」がある同じ「質問詳細1.ヘッダー」に 貼り付け、それぞれの名前を「txt質問詳細2」と「txt説明者」としてください。 上下の並びはそれぞれ揃えておいてください。 (3) 「詳細」に新しいテキストボックスを適当な場所に配置し、プロパティで 名前は適当にしておき、「コントロースソース」を「ID」にし、 「可視」を「いいえ」にしておきます。付属するラベルは必要ありません。 これは、「詳細」の「質問詳細2」の昇順の並びを確保するためのもの ですが、並びが確保されているならば設置する必要ありません。 (4) 「質問詳細1.ヘッダー」のプロパティを表示し、「フォーマット時」のイベント で、以下を設定します。 Private Sub グループヘッダー3_Format(Cancel As Integer, FormatCount As Integer)   If IsNull(Me.質問詳細2) Then     Me.詳細.Visible = False     Me.txt説明者.Visible = True   Else     Me.詳細.Visible = True     Me.txt説明者.Visible = False     Me.説明者.Visible = True     Me.txt質問詳細2.Visible = False   End If End Sub 「グループヘッダー3」というのはこちらでの ヘッダーの名前ですが、実際には違うかもしれません。中身をコピーし、 貼り付ければいいです。   If IsNull(Me.質問詳細2) Then     Me.詳細.Visible = False     Me.txt説明者.Visible = True   Else     Me.詳細.Visible = True     Me.txt説明者.Visible = False     Me.説明者.Visible = True     Me.txt質問詳細2.Visible = False   End If のところです。 以上です。分からないところがあれば補足してください。

ankle
質問者

お礼

piroin654さん、こんにちは。  おかげさまで、思ったとおりになりました。  今後とも、どうぞよろしくお願いいたします。

回答No.9

【注釈】日付が繰り返し表示されているのは、コピペミスです。日付が文字列ということで、私もそのように。その際、末尾にブランクがあったりなかったり。そんなことで変な現象が出ていたようです。が、《レイアウト変更で解決》という提案の致命的な弱点ではありません。まあ、よーく考えれば、提案したレイアウトはテーブルのデータの配置そのもの。問題が生じないのも当然です。

ankle
質問者

お礼

f_a_007さん、こんにちは。 よく確認したところ誤記を発見し、無事にエラーが消えました。 いろいろとご教示していただき、ありがとうございました。

回答No.8

【別案】こうなりゃー、レポートのフォームを変えてしまうことも・・・ そうすりゃー、消したり、表したりする必要はなくなります。で、レポートの新しいレイアウト案を示しておきます。添付図は、ただ単にウイザードで生成しただけです。

回答No.7

一時間で自己解決できなかったら、コード全文を補足されたし!

回答No.6

そうですよ。SQL文のどこかにエラーがあります。 1、SQL文をコピーする。 2、ノートに貼りつける。 3、文字を拡大して眺める。 て手順で誤りを発見して下さい。

回答No.5

>日付でなく文字列の場合   strSQL = "SELECt COUNT(*) FROM T_討論会 " & _        "WHERE " & _        "質問日 = ’" & Me.質問日 & "’ " & _        "AND 質問事項='" & Me.質問事項 & "' " & _        "AND 質問詳細1='" & Me.質問詳細1 & "'" & _        "AND 質問詳細2<>''" でOKかと思います。

ankle
質問者

補足

 早速のご回答、ありがとうございます。  何度も申し訳ございませんが、今度は「SELECT 文の実行時にエラーが発生しました。(DBLookup):・Err.Description=クエリ式(~以下略~)の 構文エラー : 演算子がありません。 」と出てしまいました。  これは、各項目を実際の名前に置き換えて入力しましたが、この置き換えている中のどこかに誤りがあるからでしょうか。  何度もすみませんが、よろしくお願いいたします。

回答No.4

【DBLookup()について】 1、1996年に書いたDBLookup()を完全再現しました。  ・欠落していたOn Error Resume Nextを復活。  ・該当しない時の戻り値を指定できるようになりました。 2、AccessのLookup()、DCount()より3倍速で動作します。 3、もちろん、Lookup()、DCount()を利用してもOKです。 Public Function DBLookup(ByVal strQuerySQL As String, Optional ReturnValue As Variant = "") As Variant On Error GoTo Err_DBLookup   Dim DataValue   Dim rst As ADODB.Recordset   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       .MoveFirst       DataValue = .Fields(0)     End If   End With Exit_DBLookup: On Error Resume Next   rst.Close   Set rst = Nothing   DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)   Exit Function Err_DBLookup:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBLookup End Function

ankle
質問者

お礼

追加で質問です。 質問日は日付型でなく、テキスト型で入っているためエラーが出たようです。 どう修正したらよろしいでしょうか。

ankle
質問者

補足

f_a_007さん、何度もすみません。  今送ったエラーに関しては、このDBLookup関数が必要だったわけですね。見逃しました。  早速、DBLookup関数を入れたもので試してみます。

回答No.3

Q、レポートを補正するVBAコードは? A、以下のようです。 Option Compare Database Private Sub グループヘッダー3_Format(Cancel As Integer, FormatCount As Integer)   Dim strSQL As String      strSQL = "SELECt COUNT(*) FROM T_討論会 " & _        "WHERE " & _        "質問日 = #" & Me.質問日 & "# " & _        "AND 質問事項='" & Me.質問事項 & "' " & _        "AND 質問詳細1='" & Me.質問詳細1 & "'" & _        "AND 質問詳細2<>''"   Me.テキスト_質問詳細1_説明者 = IIf(DBLookup(strSQL), "", Me.説明者) End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   Me.詳細.Visible = Len(Me.質問詳細2 & "") End Sub 【アドバイス】  今のテーブル設計は、データベースのそれではなくてエクセル風。それでは、添付図のような入力フォームの作成は不可能。また、エクセル風の誤ったテーブル設計ゆえにレポートが正常に作成されないということ。先の、テーブル設計改善案も所詮はエクセル風との妥協の産物。Accessを利用されるのであれば、全てに優先してテーブル設計。で、入力フォーム案を作成し、レポート案を作成し、問題なければテーブル設計が完了。で、その後に、入力フォームとレポートを作成する作業に移られると今回のような迷走は回避できますよ。と、チョイアドバイスしておきます。

ankle
質問者

補足

f_a_007さん、こんにちは。  何度もお教えいただき、誠にありがとうございます。  また、データベースの設計方法もアドバイスいただきまして、重ねてお礼申し上げます。    さて、VBAコードを入れて試しましたが、コンパイルしたところ【DBLookup】が黄色に染まり、 「コンパイルエラー:SubまたはFunctionが定義されていません。」とエラーが出ました。  このエラーに関しては、どこに原因があるのでしょうか。  なお、各項目の名前は、現在使用している名前に置き換えて入力しました。

回答No.2

【要検討事項】テーブル構造を改善するのか?表示でカバーするのか? 私が、やったことは《表示するレポートでのカバー》。ですが、本来は、テーブル構造を改善すべきかもです。(添付図参照のこと)

回答No.1

Q、アクセスの空白行を非表示に! A、だけでは無理。  [質問詳細2]が存在する時としない時で[質問者]の表示場所を変える必要があります。で、それをやれば添付図のようになります。で、終わったと思ったが、[質問詳細2]を昇順にするのを忘れていました。が、質問者の目的は達成できるってことです。詳しくは、明日。  おやすみなさい!

関連するQ&A

  • ACCESS レポートへの表示・非表示

    フォームで入力項目を無視し、データを入れなかった場合のレポートへの非表示をお聞きします。 下記のデータをレポートで表示する際、文章中に組み込んでいるのですが、データが無かった場合は前後の文章も 非表示にするにはどうすればよいのでしょうか? 例えば:下記のような入力フォームがあります。 □お客様氏名   山田花子 □契約日      05/10/04 □総額       50万円 □支払回数    10回 □分割支払金額 5万円 ★レポート表示★ 山田花子様へ 平成17年10月4日のご契約ありがとうございます。 お支払内容についてお知らせします。 -分割金総額50万円の内、5万円をお支払日に口座からお引き落しいたします。- お支払回数は10回となります。 ★上記の内容が1回払いの時は、以下のようにするにはどうすれば良いのでしょうか?★ 山田花子様へ 平成17年10月4日のご契約ありがとうございます。 お支払内容についてお知らせします。 お支払回数は1回となります。 ご回答よろしくお願いいたします!!

  • access レポートの生年月日表示方法

    こんにちは accessについて詳しい方ぜひ教えてください。 今までレポートに生年月日を表示する時、平成元年生まれの人も”平成1年1月1日”というような表示をしてきました。 しかし、元年生まれの人は”平成元年1月1日”というように表示をしなければならなくなり困っています。 プロパティで表示方法を変えれば元年生まれの人は、このような表示が出来るのでしょうか? そうでなければ、どのようにすればよいのか教えてください。 ぜひよろしくお願いします。

  • ページをアクセスしてもブラウザの履歴に残さない

    今自分で作っているホームページをブラウザの履歴に 残らないようにしたいのですが、どうしたらよろしいのでしょうか? 詳しく説明しますと... 自分が作ったページ名が[BBBBB.html]とします。 例えば[AAAAA.html]→[BBBBB.html]→[CCCCC.html]とアクセスした場合、 [CCCCC.html]からブラウザの戻るボタンを押したら、[BBBBB]には飛ばず [AAAAA.html]のページが表示されるようにしたいのですが。 この質問とは逆にページを履歴に残す方法(HTMLの記述)も知っていたら 教えて下さい。 よろしくお願いします。

  • 配列を確保したときのアドレス

    レポートなんですが 例えば、 char a[4][8]; と配列を取ったときのアドレスは、メモリにもよると思うんですが a[0][0]=aaaaa1 a[0][1]=aaaaa2 ・ ・ ・ a[0][7]=aaaaa8 a[1][0]=bbbbb1 ・ ・ a[1][7]=bbbbb8 ・ ・ となっていって、ここでa[0],a[1],a[2]・・・・のアドレスは a[0]はa[0][0]と同じで、a[1]はa[1][0]と同じなると思うんです。 それで、2次元配列a[i][j]でa[i]はどんな役割をしているかって問題にはなんと答えたらいいんでしょうか? 先頭のアドレスを表しているだけではあまりにもそっけないんでもう少しなんか書きたいのでアドバイスお願いします。

  • Accessのリポートに関して教えてください(泣)

     社内で契約書のDBを作成することになり、まったく素人の私がアクセスの本を見ながらつくっております。  使用するDBの流れはこのような感じです。  セキュリティーをかけて、社員と管理を分ける。社員はテーブルの編集できない。 そして 社員はuserとしてフォームで必要事項を記入。 そして内容がテーブルに反映される。 社員さんは、リポート形式で記入した事項を印刷をします。 リポートの形式はフォーム上のものとは違います。 IDが10だとしたら、ID10の入力事項だけが反映されるリポートというものは印刷したいです。  フォーム上で記入する事項は、書類ID(オートナンバー型)捺印申請日(Date関数で自動)、誰に出すのか(リストボックスで顧客・協力会社・その他を選択)などなどを入力してもらいます。  これらの入力した事項をレポートとしてプリントアウトしたいのです。 ただリポートの形式にはハンコを押せるスペースなども新たにあります。フォームの形で印刷はだめということです。 ここからが問題なんです。。 リポートの表示がテーブルの一番上の行が反映されるために次に入力した際に反映しません。 詳しく書きますと ID1の事項をフォームで入力する。それがテーブルに反映される。 レポートから印刷をしようとする。しっかりID1の事項が書き込まれている。 ここまではOK^^ 次に ID2の事項をフォームで入力する。しっかりID2の事項がテーブルに反映されている。 しかし! リポートのほうがID1のまま変化していません(泣) どうしたらID2の記入がリポートに反映されるのでしょうか。 助言をお願いします。 わかりにくい文ですが、皆さまよろしくお願いします。 ここの説明がわかり難いと仰っていただければ、説明を加えさせて頂きます。 助けてください(泣)

  • TwitterのRTについて

    Twitterで@BBBBBが鍵アカの状態で1月20日にフォロワーでない@AAAAAさんのツイートをRTをしたとします。 そして、2月7日に鍵を外した場合、AAAAAさんにBBBBBがRTしたことの通知は7日に行きますか。

  • 民法のレポートなのですが?

    民法のレポートで「Aは平成3年10月に5万をBに貸していたのを思い出し返してくれと昨日(平成13年11月25日)電話したところ覚えがないし、10年もたっているから、と断られた。ところが、今日、Bからやはり返したいという電話があったが、Aには受け取る権利はあるのか?」という課題がだされ、ある程度は出来たのですが最後のAには受け取る権利があるのか?というのがハッキリしません。自分は答えが3つ出ると思うのですが。時効後にBが断ってまた払いたい。と言った場合どうなるのでしょうか?教えてください。あと返済期日が平成3年11月25日なら時効は平成11月27日には時効成立なのでしょうか?

  • Access(アクセス)のレポートについて

    アクセス初心者です。 現在、従業員の出張簿のようなものを作成しています。 [従業員ID]、[氏名]、[出張場所]、[出張期間(いつから)]、[出張期間(いつまで)]をレポートで表示しています。 2006年4月1日から2007年3月31日までの2006年度のデータのみを レポートに表示するようにしたいと思っているのですが、 やり方がわかりません。 どのようにすればいいかおわかりになる方、よろしくお願い致します。

  • レポート簡単にいうが、範囲は

    通信制の大学に来年の4月から通おうと思っています。 そこで、レポートというのがありますが、説明会では先輩がレポートとは小論文といってもいいといっていました。 それはさておき、レポートとはどっからどこまでをまとめるの?ということです。 高校までの教科書と同じ感じの教科書で、節ごとにまとめるとか章ごとにまとめる。とかなのでしょうか? 説明がうまくいえませんが、レポートを書いたことのある人に質問です。 具体例を出して、教えてください。

  • Accessレポートに今日の日付を和暦での表示方法

    Access2013 レポートに今日の日付を挿入した際、和暦(平成27年2月9日)で表示させる設定方法を教えてください。よろしくお願いします

専門家に質問してみよう