• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2016のレポートについて)

Access2016のレポートで代表者の空欄を詰めて出力する方法

このQ&Aのポイント
  • Access2016のレポートで代表者が空欄となっている箇所を詰めて出力する方法について解説します。
  • 詳細セクションと代表者名のテキストボックスの印刷時縮小を「はい」にすると、null値または「長さ0の文字列」のときに自動で詰まるという情報がありますが、それがうまく機能しない場合にはどうすればよいかもご紹介します。
  • この記事では、Access2016のレポートで代表者の空欄を詰めて出力するための方法について詳しく説明します。要約セクションと代表者名のテキストボックスの印刷時の設定を調整することで、空白行をなくすことができます。さらに、具体的な手順や設定値の指定も記載していますので、ぜひ参考にしてください。

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

  • ベストアンサー
回答No.8

【最後のチェック】Me.xxx SELECT 地区名, 地域名, 代表者名台帳.名前 AS 代表者名   FROM A LEFT JOIN 代表者名台帳 ON A.代表者名_ID=代表者名台帳.ID   WHERE Len(代表者名台帳.名前 & "");  上記SQLでは、表向きは《代表者名》。だが、実体は、《代表者名台帳.名前》です。この場合でも、SELECT文はちゃんと働きます。が、いずれにしろ、こういう類のことが起きているのかもしれません。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   Me.詳細.Visible = Len(Me.代表者名 & "") End Sub  《Me.代表者名》が正しければ、これで目的が達成されます。されないことは絶対にあり得ません。唯一の可能性は、Me.xxx の間違いです。そこで、Me.とやって候補を取得するテストをしてみる。それで何かが分かるかもです。 《フィルタの利用はあり得ない》  なお、フィルタ機能は、《表示地区選択メニュー》からレポートを開く際に持ちいる機能。ですから、不具合データを非表示するのに利用するのは誤用。やっぱり上のやり方。そういうことで、最後に、Me.XXXを表示して最終確認を。

ankle
質問者

お礼

f_a_007さん、いつもお世話になっております。 何度もご教示いただきまして、誠にありがとうございます。 後ほど試してみますので、改めてご報告いたします。

ankle
質問者

補足

f_a_007さん、こんばんは。  おかげさまで、この例のテーブルではうまく表示になりました。  ただ、教えていただいた形で仕事で使っている本番用のAccessに適用させたら、残念ながらうまくいきませんでした。  新たな質問として、再度質問(仕事で使っている構造と同じ)しようと思いますのでよろしくお願いいたします。

その他の回答 (11)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.12

今日は レポートAのデザインビューのプロパティーでレコードソースの右端の…を クリックするとクエリビルダが起動しクエリーが表示されます。 これに、使用するフィールドを下にドラッグして、抽出条件を記述します 尚、フィールド名はワイルドカード(*)が使えます 項目名に重複を避けるため (*)を使うと、条件の為ドラッグした代表者名の表示欄の✔を外します。

ankle
質問者

お礼

chayamatiさん、おはようございます。 参考になる情報をお教えいただきまして、誠にありがとうございます。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.11

No.10 です。 レポートビューでは フォーマットイベントは発生しませんので この方法では出来ません。

ankle
質問者

お礼

m3_makiさん、こんにちは。 レポートビューでは表示にならないのですね。いろいろとありがとうございました。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.10

No.9 です。 > フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。 印刷プレビュー ではなく、レポートビュー で見ているのではありませんか?

ankle
質問者

お礼

m3_makiさん、こんばんは。 おっしゃる通り、印刷プレビュー ではなく、レポートビュー で見ていました。失礼しました。 ちなみに、レポートビューでも非表示にできますでしょうか。

  • m3_maki
  • ベストアンサー率64% (296/460)
回答No.9

横から失礼します。 「代表者名」が空のレコード(Null, 空文字列, スペースのみ)を 表示しない、ということなら これでいけます。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)  If Me.代表者名 Like "*[! ]*" Then  Else   Cancel = True  End If End Sub

ankle
質問者

補足

m3_makiさん、お答えいただきましてありがとうございます。 さて、フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。

回答No.7

【補足】先ずは、SQL文のテストをしっかり!  私は、先ず、添付図のようにDBSelect()でSQL文をテストしてからレポートの作成作業に移行しています。質問者も、段取りを踏んだ方がいいですよ。ただ、【イミディエイトウインドウ】で簡単にテストする関数は用意されていません。そこで、自作することになります。自作と言っても、単に次に紹介するDBSelect()を標準モジュールにコピペするだけです。その後に、【ツール】【参照設定】で Microsoft ActiveX Data Obeject 2.1 Library にレ点を付けるだけです。  多分ですが、SQL文のテストに成功されたら、万事上手くいくと思いますよ。 祈、成功! Public Function DBSelect(ByVal strQuerySQL As String, _              Optional colDelimita As String = ";", _              Optional rowDelimita As String = ";") As String On Error GoTo Err_DBSelect   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1 '  Dim cnn     As ADODB.Connection   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納     Set cnn = CurrentProject.Connection   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       N = .RecordCount - 1       .MoveFirst       For R = 0 To N         For Each fld In .Fields           With fld             strList = strList & .Value & colDelimita           End With         Next fld         strList = Mid(strList, 1, Len(strList) - 1) & rowDelimita         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", rowDelimita & "[END]", ""), "")   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr(13) & Chr(13) & _       "・Err.Description=" & Err.Description & Chr(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function

ankle
質問者

お礼

f_a_007さん、お世話になっております。  お教えいただいた内容で行いましたら、ここで例として上げているテーブルではうまくいきました。  ただ、仕事で使っている本番用のAccess(もう少し複雑な中身)では、うまく表示になりませんでした(T_T)

ankle
質問者

補足

 f_a_007さん、ご回答ありがとうございます。    こんなに長いモジュールを作成していただき、本当にありがとうございます。  早速試してみますので、結果は後ほどお知らせいたします。

回答No.6

【補足】手抜き回答しちゃったので・・・ クエリを使ったらなんて、手抜きでいい加減な回答をしてしまったので・・・ ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※  原則:Access のクエリはフォームやレポートで用いるべからず! ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ちゃんと、SQL文を書くのが基本中の基本です。で、その要領を示しておきます。これで、テストされてみたら・・・ 当方、全く同じテーブル、同じデータで試していますので、同じ結果になると思いますよ。もしかしたら、《代表者名が空ではないのかも》ですね。 SELECT * FROM A WHERE Len(Trim([代表者名]) & ''); だったら、空行が出力されないかもです。

回答No.5

【補足】クエリ17とは? それは、添付図のようです。 <> False は、Access のクエリ編集が勝手に付けます。別に必須ではありませんが、仕方ありません。

回答No.4

補足:Where節の書き方は人それぞれ 1、Len([列名] & "") 2、Not isNull([列名]) これは、好みの問題です。私の好みは1です。

ankle
質問者

補足

 f_a_007さん、何度もありがとうございます。  私のやり方が悪く、どうしても空白行が出てしまい、余白となってしまいます。  感じ的には、シンプルな「【補足】レポートで消すことも可能!」でいけそうな気がするんですが、ダメみたいです(T_T)  

回答No.3

【補足】レポートでフィルタをかければOKだが・・・ でも、その場合、一旦全てを読み込むことになります。で、予めデータを絞り込んだクエリを作成してレポートをビルドするのが普通だと思いますよ。

回答No.2

【補足】レポートで消すことも可能! でも、その場合には、レポートのレイアウトが上ではなく下でなければならにという制約が生じます(添付図参照のこと)。なぜなら、空である行を消すと、そこにある別のデータも消えるからです。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   Me.詳細.Visible = Len(Me.代表者名 & "") End Sub

関連するQ&A