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

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

Access2016のレポートについて

 いつもお世話になっております。  Access2016のレポートで困っていますので、ご教示をお願いいたします。  下記のようなテーブルがあり、代表者がまだ決まっていない地域があるため、空白となっている所があります。  これをレポートで出力した際、代表者が空欄となっている所は1行分空いてしまいます。この代表者が空欄となっている所を詰めて出力したいと思います。  いろいろと調べて、詳細セクションと代表者名のテキストボックスの印刷時縮小をそれぞれ「はい」にすると、null値または「長さ0の文字列」の時は自動で詰まるとありましたが、なりませんでした。  どうか、ご教示をよろしくお願いいたします。 【テーブルA】 地区名   地域名   代表者名 AAA     あああ   ネズミ AAA     ああい   ウシ AAA     ああい  (空白) BBB    いいあ   トラ BBB     いいあ   ウサギ CCC     ううあ   タツ CCC     ううあ  (空白) CCC     ううい   ヘビ 【レポートA】 地区名(グループ化)  地域名(グループ化)  代表者名(詳細セクション) AAA             あああ                         ネズミ             ああい                         ウシ                         (空白行) ------------------------------- BBB             いいあ                         トラ                         ウサギ ------------------------------- CCC             ううあ                         タツ                         (空白行)             ううい                         ヘビ ------------------------------- ↓空白行をなしで出力したい形 【レポートA】 地区名(グループ化)  地域名(グループ化)  代表者名(詳細セクション) AAA             あああ                          ネズミ             ああい                          ウシ ------------------------------- BBB             いいあ                          トラ                          ウサギ ------------------------------- CCC             ううあ                          タツ             ううい                          ヘビ -------------------------------

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

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

  • ベストアンサー
回答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% (254/607)
回答No.12

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

ankle
質問者

お礼

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

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

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

ankle
質問者

お礼

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

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

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

ankle
質問者

お礼

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

  • m3_maki
  • ベストアンサー率64% (295/459)
回答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

  • ACCESSのレポートのついてです

    初心者でお恥ずかしい質問ですが、本当に悩んでいます。 どうか教えてください!! バージョンは2007です。 クエリで 以下の通り表示されているものを レポートで表示する方法についてです。 本社  AAA 本社  BBB 本社  CCC 本社  DDD 本社  EEE ア支店 FFF イ支店 GGG 以下続く ○表示したいレポート1   (担当)本社       (製品名)AAA             BBB             CCC             DDD             EEE ○レポート2   (担当)ア支店       (製品名)FFF             「以下余白」             (空白のセル)             (空白のセル)             (空白のセル)                 ○ 教えてください(1)   1ページに5件の製品名を表示できるをようにしたいです。   5件以下の場合は、空白のセルが表示されるようにしたいです             ○ 教えてください(2)    1~4件の表示の時、「以下余白」の文字を入れたいです 今の状況は、 レポート1  (担当)本社       (製品名)AAA             AAA             AAA             AAA             AAA です。 どうぞご指導ください!お願いします!!

  • bashスクリプトでのテキストの検索・置換について

    下記のような形式のテキストファイルがあります。 []で囲まれた部分の文字列(セクション名)はわかっています。 各セクションの間には空行があることもあれば無いこともあります。 各セクションの記載順序は不定です。 各セクションの中の記載順も不定です。 各セクションの中の行数も不定です。 別々のセクションに同じ行があり得ます。 この場合に、bashスクリプトの中で、[def]セクションの文字列cccをccdに置き換えるにはどのような方法があるでしょうか。 awkでできるような気がするのですが、 awk '/\[def\]/{BEGINNUM = NR}' FILENAME とすれば BEGINNUM にセクションの始まりを取得できるものの、セクションの終わりの行番号の取得がわかりません。 [def]行の後に最初に出てくる[]の付いた行を検出すればよいのですが、特定の行以降で最初に出てくる文字列の行を検索するのはどうすればよいでしょうか。 あるいは、まったく異なった方法があるでしょうか。 (対象テキストファイル) [abc] aaa bbb ccc [def] aaa ccc bbb ddd [ghi] aaa eee bbb ccc (テキストファイル終了) 2007年3月25日

  • アクセスのレポートでの連番付番方法について

     いつもお世話になっております。  アクセス2016のレポートで、連番のふり方についてお教えいただきたいと思います。  レポートでは、最初に日付でグループ化し、次に名前でグループ化しています。  連番は最初のグループ化でしている日付でふりたいのですが、やり方が分かりませんので、どうぞご教示をお願いいたします。  イメージは、下記のように考えています。 【例】テーブル名:T_仕事 日付    名前   仕事 8月1日  ああああ aaa 8月1日  ああああ bbb 8月1日  いいいい ccc 8月1日  うううう ddd 8月2日  うううう eee 8月2日  うううう fff 8月2日  ええええ ggg 8月2日  おおおお hhh 8月2日  おおおお iii 8月3日  かかかか jjj 8月3日  かかかか kkk レポート名:R_仕事 日付   名前   仕事 連番 8月1日 ああああ aaa  1           bbb  2      いいいい ccc  3      うううう ddd  4 8月2日 うううう eee  1           fff   2      ええええ ggg  3      おおおお hhh  4           iii   5 8月3日 かかかか jjj   1           kkk  2

  • Access レポートの改ページについて

    お世話になります。 以下のテーブルがあります。  受注日     型番    納期  2015/01/01 AAA   2015/01/05  2015/01/01 BBB   2015/01/05  2015/01/01 CCC   2015/01/06  2015/01/01 DDD   2015/01/06 で、このテーブルをソースとしてレポートを作成したいのですが、 「納期」で改ページさせたいところです。 なので、このテーブルをレポートで開くと、  納期:2015/01/05 ← ヘッダー  受注日     型番  2015/01/01 AAA  2015/01/01 BBB  納期:2015/01/06 ← ヘッダー  受注日     型番  2015/01/01 CCC  2015/01/01 DDD と、2ページになって欲しいのですが。。 どのようにすれば、このように改ページできるように なりますでしょうか。 ご教示の程、宜しくお願い致します。

  • 抽出して並べ替えたい

    初めまして 非常に悩んでいます。 エクセルシートの列に下記のようにデータが並んでいます。(文字列) AAA bbb ccc (空白) BBB ddd eee (空白) AAA bbb ccc (空白) AAA eee ggg 並べ替え後 AAA AAA BBB bbb eee ddd ccc ggg eee 尚、列上でセル位置は任意で、空白行も任意です。(1つ以上です) できれば関数でお願いします。 VBAの場合、使用したことがないので詳しくお願いします。

  • Access2003or2000レポート機能

    お世話になっております。 Access2003のレポートでお聞きしたい事があります。 データとして、 【フィールド】 名前,金額 【値】 AAA,100 AAA,200 AAA,300 BBB,100 【レポート】 (1枚目) 名前:AAA 金額 100, 200, 300 (列が多いと2枚目以降は名前を表示しない) (2枚目) 名前:BBB 金額 100 と表示したいのです。 グループ化の設定で名前を指定すれば、 名前でブレークします。 ページヘッダに金額ラベル、詳細に金額フィールドを指定すれば、 上記レポートのレイアウトになります。 しかしレイアウト上名前を一番上に設定したいのですが、 レポートヘッダに指定すると、一枚目しか出ませんし、 ページヘッダに指定すると、毎ページ出力されますし、 グループ化し、できた名前ヘッダーに指定すると、ページヘッダーより下に表示されますし・・・。 【レポート】の様なレイアウトの実現にはどの様な方法があるでしょうか? お時間のある有識者の方、ご享受宜しくお願い致します。

  • ACCESS 2007 レポートについて

    ACCESS 2007 レポートについて レポート作成時、年度毎にグループ化し集計したいのですがうまくいきません。イメージとしては下記のように作成したいです。 テーブル 品名  日付   金額 AAA  H12/4/1  3000 BBB  H12/12/31 4000 CCC  H13/3/31 5000 DDD  H13/4/1  6000 EEE  H13/10/1 7000 FFF  H14/3/31 8000 レポートにて 品名  日付  金額 AAA  H12/4/1  3000 BBB  H12/12/31 4000 CCC  H13/3/31 5000 平成12年度 合計3件 DDD  H13/4/1  6000 EEE  H13/10/1 7000 FFF  H14/3/31 8000 平成13年度 合計3件 こんな感じでレポートにて表示させたいのですが、ついでに年度毎に1ページに表示させたいです。(データが多ければ(2)ページになります) クエリを使用し、例えば、平成13年度のみ表示させることはできます。 抽出条件にBetween CDate(CStr([年度を入力]) & "/4/1") And CDate(CStr([年度を入力]+1) & "/3/31")

  • 行数ごとに検索をかけて並び替えをしたいのですが・・

    数千のファイル名が書かれたテキストファイルがあります。(Aとします。) /yyy/ccc.txt /aaa/aaa.txt /bbb/bbb.txt /sss/aaa.txt /ccc/bbb.txt /zzz/ccc.txt ・ ・ ・ ユニークファイル名だけ書かれたファイルがあります。(Bとします。) aaa.txt bbb.txt ccc.txt ・ ・ ・ Bの行数1行ずつAで検索をかけ、ファイル名を新しいファイル(Cとします)に書き出したいのです。 /aaa/aaa.txt /sss/aaa.txt /bbb/bbb.txt /ccc/bbb.txt /yyy/ccc.txt /zzz/ccc.txt ・ ・ ・ シェルを使ってやりたいのですが、どのようにすればいいのか見当もつきません。 どなたかお分かりのかたいましたら教えてください。よろしくおねがいします。

  • パズル得意な人教えてください。

    虎 馬 蛇 龍 羊 牛 鼠 兎  兎の隣には一つスペースがあり干支の順に並べるスライドパズルなんですがどうしてもできません。 順番は、 鼠 牛 虎 兎 龍 蛇 馬 羊 と並べなくてはいけないんですが私には無理です。 できる人いますか?

  • ACCESSレポートの質問です

    ACCESS2010のレポートで伝票印刷(7行明細)をしています。 商品名が長いのがあるので、1行の明細で2段(30文字/30文字)に印刷するようにしています。上段に商品名1、下段に商品名2です。 商品名が30文字以内のときは、商品名2は空白なので商品名1を下段に印字したいです。レポートの「詳細」で商品名2が空白のときにコントロールソースの内容を変更して出来ないかと思っています。 ご存知の方は教えてください。 よろしくお願いします

専門家に質問してみよう