• 締切済み

ACCESSのレポートで、最後の空白行を表示させない方法

ACCESS 2002 を使用しています。 現在、以下のように支店毎に売り上げを印刷するレポートを使用しています。 <例> 東京支店  東京 太郎 取引先A 1,000,000円  東京 太郎 取引先B  500,000円  東京 次郎 取引先A 5,000,000円  東京 花子 取引先C 1,950,000円    ・    ・ ※支店が変わると改ページ ※1頁の最大行数は20行 ※20行に満たない場合はその時点で改ページ ※上図では略していますが、各行には罫線があります。 これでは見づらいので、担当者が変わるたびに空白行を入れて欲しいとの要望が出ました。 <例> 東京支店  東京 太郎 取引先A 1,000,000円  東京 太郎 取引先B  500,000円                    ←空白行  東京 次郎 取引先A 5,000,000円                    ←空白行  東京 花子 取引先C 1,950,000円                    ←空白行(不要) そこで「並べ替え/グループ化」で、担当者フッターを作成し、その内容を詳細と同じようにしたところ、空白行が挿入されるようになったのですが、各営業所の最後の担当者の後にも空白行が出力されてしまいます(上図の不要という部分)。 この最後の空白行を出力しないようにするにはどうしたら良いでしょうか。 以上です。 よろしくお願いいたします。

みんなの回答

noname#140971
noname#140971
回答No.4

DBCount関数は標準モジュールにコピペしてください。

musa2008
質問者

お礼

ご回答ありがとうございました。 ですが、どうにも意図どおりに動いてくれません。 これ以上お手を煩わせても申し訳ないので締め切らせていただきます。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.3

テストで作成してレポートを示します。 -------------------------------------------------------------- レポートヘッダー -------------------------------------------------------------- [tab2]<---[ラベル8](標題) -------------------------------------------------------------- ページヘッダー -------------------------------------------------------------- [fld1__________][fld2________][fld3_________][ID] -------------------------------------------------------------- fld1ヘッダー -------------------------------------------------------------- [fld1] -------------------------------------------------------------- fld2ヘッダー -------------------------------------------------------------- __________[fld2] -------------------------------------------------------------- 詳細 -------------------------------------------------------------- __________________________________[fld3_________][ID] -------------------------------------------------------------- fld2 フッター -------------------------------------------------------------- -------------------------------------------------------------- ページ フッター -------------------------------------------------------------- 実際の表示 A__aaa__111 ___aaa__111 ___aaa__222 ___________ <--- フッター発生 ___bbb__333 B ___aaa__444 つまり、[fld1ヘッダー]の有無が両者の差異だと思います。 [fld1ヘッダー]部でAグループの総数を求めている訳です。 で、このルーチンから[fld1ヘッダー]の存在は類推できると思って割愛。 説明が舌足らずだったということです。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

DCount関数でもOKです。 が、高速化が希望であればADODBも用いた以下のような関数がお勧めです。 Public Function DBCount(ByVal strField As String, _             ByVal strTable As String, _             Optional ByVal strWhere As String = "", _             Optional ByVal ReturnValue = 0) As Variant On Error GoTo Err_DBCount    Dim N    Dim strQuerySQL As String    Dim rst     As ADODB.Recordset    Set rst = New ADODB.Recordset    strQuerySQL = "SELECT COUNT(" & strField & ") FROM " & strTable    If Len(strWhere) > 0 Then      strQuerySQL = strQuerySQL & " WHERE " & strWhere    End If    With rst      .Open strQuerySQL, _         CurrentProject.Connection, _         adOpenStatic, _         adLockReadOnly      If Not .BOF Then        .MoveFirst        N = .Fields(0)      End If    End With Exit_DBCount: On Error Resume Next    rst.Close    Set rst = Nothing    DBCount = IIf(N <> 0, N, ReturnValue)    Exit Function Err_DBCount:    MsgBox "SELECT 文の実行時にエラーが発生しました。(DBCount)" & Chr$(13) & Chr$(13) & _       "・Err.Description=" & Err.Description & Chr$(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"    Resume Exit_DBCount End Function

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.1

ID__fld1__fld2__fld3 1___A_____aaa___111 2___A_____aaa___222 3___A_____bbb___333 4___B_____aaa___444 A__aaa__111 ___aaa__222 ___________ <--- フッター発生 A__bbb__333 B__aaa__444 Option Compare Database Option Explicit Dim MenberTotal As Integer Dim MenberCount As Integer Private Sub グループフッター0_Format(Cancel As Integer, FormatCount As Integer)   Cancel = CBool(MenberTotal = MenberCount) End Sub Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer)   MenberTotal = DBCount("*", "Tab1", "fld1='" & Me.fld1 & "'")   MenberCount = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   MenberCount = MenberCount + 1 End Sub [fld1]='A'に属するメンバー総数を求めます。 同時にメンバーのカンターを初期化します。 で、<メンバー総数=メンバー出力数>がフッターのキャンセル時。 改ページでは試していません。 僅か4行でのテスト。 が、上述の結果を得ました。

musa2008
質問者

お礼

早速のご回答をありがとうございました。 これから試してみます。 結果につきましては改めて報告させていただきます。

musa2008
質問者

補足

上記と同じテーブルを用意し、コードをそのまま貼り付けたのですが「コンパイルエラー Sub または Function が定義されていません」と出ますが、何が悪いのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A