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

解決済みの質問

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

 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 かかかかか オオオオオ サル

投稿日時 - 2019-02-16 22:45:29

QNo.9588510

すぐに回答ほしいです

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

No10です。
説明漏れがあったので追加しておきます。

もし「ID」を使うのであれば、「並び替え/グループ化」のプロパティを
表示し、「フィールド/式」に「ID」を表示し、「並び替え順序」を「昇順」
にしてください。「ID」にグループヘッダーは設定しません。「昇順」
だけを設定します。




>(2)
>レポートの「詳細」にある「質問詳細2」と「説明者」の二つのテキスト
>ボックスをコピーし、テキストボックス「質問詳細1」がある同じ
>「質問詳細1.ヘッダー」に貼り付け、それぞれの名前を「txt質問詳細2」
>と「txt説明者」としてください。上下の並びはそれぞれ揃えておいて
>ください。

のところで、「txt質問詳細2」と「txt説明者」のコントロールソースは
それぞれ「質問詳細2」と「説明者」のコントロールソースと同じです。
コピーし貼り付け、名前を変えただけなので当然ですが。


以上です。

投稿日時 - 2019-02-18 12:15:47

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

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

回答(11)

ANo.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

のところです。





以上です。分からないところがあれば補足してください。

投稿日時 - 2019-02-18 11:34:56

お礼

piroin654さん、こんにちは。

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

投稿日時 - 2019-02-18 15:18:06

ANo.9

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

投稿日時 - 2019-02-17 23:51:52

お礼

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

投稿日時 - 2019-02-18 15:16:14

ANo.8

【別案】こうなりゃー、レポートのフォームを変えてしまうことも・・・

そうすりゃー、消したり、表したりする必要はなくなります。で、レポートの新しいレイアウト案を示しておきます。添付図は、ただ単にウイザードで生成しただけです。

投稿日時 - 2019-02-17 23:12:17

ANo.7

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

投稿日時 - 2019-02-17 17:27:08

ANo.6

そうですよ。SQL文のどこかにエラーがあります。

1、SQL文をコピーする。
2、ノートに貼りつける。
3、文字を拡大して眺める。

て手順で誤りを発見して下さい。

投稿日時 - 2019-02-17 17:12:38

ANo.5

>日付でなく文字列の場合

  strSQL = "SELECt COUNT(*) FROM T_討論会 " & _
       "WHERE " & _
       "質問日 = ’" & Me.質問日 & "’ " & _
       "AND 質問事項='" & Me.質問事項 & "' " & _
       "AND 質問詳細1='" & Me.質問詳細1 & "'" & _
       "AND 質問詳細2<>''"

でOKかと思います。

投稿日時 - 2019-02-17 15:50:27

補足

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

投稿日時 - 2019-02-17 16:30:22

ANo.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

投稿日時 - 2019-02-17 13:45:23

補足

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

投稿日時 - 2019-02-17 14:34:31

お礼

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

投稿日時 - 2019-02-17 14:56:57

ANo.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を利用されるのであれば、全てに優先してテーブル設計。で、入力フォーム案を作成し、レポート案を作成し、問題なければテーブル設計が完了。で、その後に、入力フォームとレポートを作成する作業に移られると今回のような迷走は回避できますよ。と、チョイアドバイスしておきます。

投稿日時 - 2019-02-17 09:42:20

補足

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

投稿日時 - 2019-02-17 14:30:09

ANo.2

【要検討事項】テーブル構造を改善するのか?表示でカバーするのか?

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

投稿日時 - 2019-02-17 00:12:12

ANo.1

Q、アクセスの空白行を非表示に!
A、だけでは無理。

 [質問詳細2]が存在する時としない時で[質問者]の表示場所を変える必要があります。で、それをやれば添付図のようになります。で、終わったと思ったが、[質問詳細2]を昇順にするのを忘れていました。が、質問者の目的は達成できるってことです。詳しくは、明日。

 おやすみなさい!

投稿日時 - 2019-02-17 00:00:54

あなたにオススメの質問