- ベストアンサー
Access2016のレポートで代表者の空欄を詰めて出力する方法
- Access2016のレポートで代表者が空欄となっている箇所を詰めて出力する方法について解説します。
- 詳細セクションと代表者名のテキストボックスの印刷時縮小を「はい」にすると、null値または「長さ0の文字列」のときに自動で詰まるという情報がありますが、それがうまく機能しない場合にはどうすればよいかもご紹介します。
- この記事では、Access2016のレポートで代表者の空欄を詰めて出力するための方法について詳しく説明します。要約セクションと代表者名のテキストボックスの印刷時の設定を調整することで、空白行をなくすことができます。さらに、具体的な手順や設定値の指定も記載していますので、ぜひ参考にしてください。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
【最後のチェック】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を表示して最終確認を。
その他の回答 (11)
- chayamati
- ベストアンサー率41% (260/624)
- m3_maki
- ベストアンサー率64% (296/460)
No.10 です。 レポートビューでは フォーマットイベントは発生しませんので この方法では出来ません。
お礼
m3_makiさん、こんにちは。 レポートビューでは表示にならないのですね。いろいろとありがとうございました。
- m3_maki
- ベストアンサー率64% (296/460)
No.9 です。 > フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。 印刷プレビュー ではなく、レポートビュー で見ているのではありませんか?
お礼
m3_makiさん、こんばんは。 おっしゃる通り、印刷プレビュー ではなく、レポートビュー で見ていました。失礼しました。 ちなみに、レポートビューでも非表示にできますでしょうか。
- m3_maki
- ベストアンサー率64% (296/460)
横から失礼します。 「代表者名」が空のレコード(Null, 空文字列, スペースのみ)を 表示しない、ということなら これでいけます。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If Me.代表者名 Like "*[! ]*" Then Else Cancel = True End If End Sub
補足
m3_makiさん、お答えいただきましてありがとうございます。 さて、フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】先ずは、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
お礼
f_a_007さん、お世話になっております。 お教えいただいた内容で行いましたら、ここで例として上げているテーブルではうまくいきました。 ただ、仕事で使っている本番用のAccess(もう少し複雑な中身)では、うまく表示になりませんでした(T_T)
補足
f_a_007さん、ご回答ありがとうございます。 こんなに長いモジュールを作成していただき、本当にありがとうございます。 早速試してみますので、結果は後ほどお知らせいたします。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
【補足】手抜き回答しちゃったので・・・ クエリを使ったらなんて、手抜きでいい加減な回答をしてしまったので・・・ ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ 原則:Access のクエリはフォームやレポートで用いるべからず! ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ ちゃんと、SQL文を書くのが基本中の基本です。で、その要領を示しておきます。これで、テストされてみたら・・・ 当方、全く同じテーブル、同じデータで試していますので、同じ結果になると思いますよ。もしかしたら、《代表者名が空ではないのかも》ですね。 SELECT * FROM A WHERE Len(Trim([代表者名]) & ''); だったら、空行が出力されないかもです。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
- 1
- 2
お礼
f_a_007さん、いつもお世話になっております。 何度もご教示いただきまして、誠にありがとうございます。 後ほど試してみますので、改めてご報告いたします。
補足
f_a_007さん、こんばんは。 おかげさまで、この例のテーブルではうまく表示になりました。 ただ、教えていただいた形で仕事で使っている本番用のAccessに適用させたら、残念ながらうまくいきませんでした。 新たな質問として、再度質問(仕事で使っている構造と同じ)しようと思いますのでよろしくお願いいたします。