解決済み

Access2016のレポートについて

  • すぐに回答を!
  • 質問No.9587703
  • 閲覧数184
  • ありがとう数6
  • 気になる数1
  • 回答数12
  • コメント数0

お礼率 39% (42/107)

 いつもお世話になっております。
 Access2016のレポートで困っていますので、ご教示をお願いいたします。
 下記のようなテーブルがあり、代表者がまだ決まっていない地域があるため、空白となっている所があります。
 これをレポートで出力した際、代表者が空欄となっている所は1行分空いてしまいます。この代表者が空欄となっている所を詰めて出力したいと思います。
 いろいろと調べて、詳細セクションと代表者名のテキストボックスの印刷時縮小をそれぞれ「はい」にすると、null値または「長さ0の文字列」の時は自動で詰まるとありましたが、なりませんでした。
 どうか、ご教示をよろしくお願いいたします。

【テーブルA】
地区名   地域名   代表者名
AAA    あああ   ネズミ
AAA    ああい   ウシ
AAA    ああい  (空白)
BBB    いいあ   トラ
BBB    いいあ   ウサギ
CCC    ううあ   タツ
CCC    ううあ  (空白)
CCC    ううい   ヘビ

【レポートA】
地区名(グループ化)  地域名(グループ化)  代表者名(詳細セクション)
AAA
            あああ
                        ネズミ
            ああい
                        ウシ
                        (空白行)
-------------------------------
BBB
            いいあ
                        トラ
                        ウサギ
-------------------------------
CCC
            ううあ
                        タツ
                        (空白行)
            ううい
                        ヘビ
-------------------------------

↓空白行をなしで出力したい形

【レポートA】
地区名(グループ化)  地域名(グループ化)  代表者名(詳細セクション)
AAA
            あああ
                         ネズミ
            ああい
                         ウシ
-------------------------------
BBB
            いいあ
                         トラ
                         ウサギ
-------------------------------
CCC
            ううあ
                         タツ
            ううい
                         ヘビ
-------------------------------

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

  • 回答No.8

ベストアンサー率 20% (950/4547)

【最後のチェック】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

お礼率 39% (42/107)

f_a_007さん、こんばんは。
 おかげさまで、この例のテーブルではうまく表示になりました。
 ただ、教えていただいた形で仕事で使っている本番用のAccessに適用させたら、残念ながらうまくいきませんでした。
 新たな質問として、再度質問(仕事で使っている構造と同じ)しようと思いますのでよろしくお願いいたします。
投稿日時 - 2019-02-16 21:18:36
お礼コメント
ankle

お礼率 39% (42/107)

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

その他の回答 (全11件)

  • 回答No.12

ベストアンサー率 43% (190/438)

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

お礼率 39% (42/107)

chayamatiさん、おはようございます。
参考になる情報をお教えいただきまして、誠にありがとうございます。
投稿日時 - 2019-02-22 08:43:40
  • 回答No.11

ベストアンサー率 64% (260/403)

No.10 です。

レポートビューでは フォーマットイベントは発生しませんので
この方法では出来ません。
お礼コメント
ankle

お礼率 39% (42/107)

m3_makiさん、こんにちは。
レポートビューでは表示にならないのですね。いろいろとありがとうございました。
投稿日時 - 2019-02-17 13:12:03
  • 回答No.10

ベストアンサー率 64% (260/403)

No.9 です。

> フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。

印刷プレビュー ではなく、レポートビュー で見ているのではありませんか?
お礼コメント
ankle

お礼率 39% (42/107)

m3_makiさん、こんばんは。
おっしゃる通り、印刷プレビュー ではなく、レポートビュー で見ていました。失礼しました。
ちなみに、レポートビューでも非表示にできますでしょうか。
投稿日時 - 2019-02-16 21:55:49
  • 回答No.9

ベストアンサー率 64% (260/403)

横から失礼します。

「代表者名」が空のレコード(Null, 空文字列, スペースのみ)を
表示しない、ということなら
これでいけます。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
 If Me.代表者名 Like "*[! ]*" Then
 Else
  Cancel = True
 End If
End Sub
補足コメント
ankle

お礼率 39% (42/107)

m3_makiさん、お答えいただきましてありがとうございます。
さて、フォーマット時イベントに上記モジュールを入れてみましたが、残念ながら空白行が表示となりました。
投稿日時 - 2019-02-16 20:19:50
  • 回答No.7

ベストアンサー率 20% (950/4547)

【補足】先ずは、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

お礼率 39% (42/107)

 f_a_007さん、ご回答ありがとうございます。
 
 こんなに長いモジュールを作成していただき、本当にありがとうございます。
 早速試してみますので、結果は後ほどお知らせいたします。
投稿日時 - 2019-02-14 15:52:52
お礼コメント
ankle

お礼率 39% (42/107)

f_a_007さん、お世話になっております。

 お教えいただいた内容で行いましたら、ここで例として上げているテーブルではうまくいきました。
 ただ、仕事で使っている本番用のAccess(もう少し複雑な中身)では、うまく表示になりませんでした(T_T)
投稿日時 - 2019-02-14 19:34:40
  • 回答No.6

ベストアンサー率 20% (950/4547)

【補足】手抜き回答しちゃったので・・・

クエリを使ったらなんて、手抜きでいい加減な回答をしてしまったので・・・

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
 原則:Access のクエリはフォームやレポートで用いるべからず!
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

ちゃんと、SQL文を書くのが基本中の基本です。で、その要領を示しておきます。これで、テストされてみたら・・・

当方、全く同じテーブル、同じデータで試していますので、同じ結果になると思いますよ。もしかしたら、《代表者名が空ではないのかも》ですね。

SELECT * FROM A WHERE Len(Trim([代表者名]) & '');

だったら、空行が出力されないかもです。
  • 回答No.5

ベストアンサー率 20% (950/4547)

【補足】クエリ17とは?

それは、添付図のようです。 <> False は、Access のクエリ編集が勝手に付けます。別に必須ではありませんが、仕方ありません。
  • 回答No.4

ベストアンサー率 20% (950/4547)

補足:Where節の書き方は人それぞれ

1、Len([列名] & "")
2、Not isNull([列名])

これは、好みの問題です。私の好みは1です。
補足コメント
ankle

お礼率 39% (42/107)

 f_a_007さん、何度もありがとうございます。

 私のやり方が悪く、どうしても空白行が出てしまい、余白となってしまいます。
 感じ的には、シンプルな「【補足】レポートで消すことも可能!」でいけそうな気がするんですが、ダメみたいです(T_T)
 
投稿日時 - 2019-02-14 14:54:44
  • 回答No.3

ベストアンサー率 20% (950/4547)

【補足】レポートでフィルタをかければOKだが・・・

でも、その場合、一旦全てを読み込むことになります。で、予めデータを絞り込んだクエリを作成してレポートをビルドするのが普通だと思いますよ。
  • 回答No.2

ベストアンサー率 20% (950/4547)

【補足】レポートで消すことも可能!

でも、その場合には、レポートのレイアウトが上ではなく下でなければならにという制約が生じます(添付図参照のこと)。なぜなら、空である行を消すと、そこにある別のデータも消えるからです。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
  Me.詳細.Visible = Len(Me.代表者名 & "")
End Sub
11件中 1~10件目を表示
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ