簡単に実現できる方法を思いつきました。
各グループの小計はグループフッターセクションで表示しているとします。
それぞれのグループの小計を表示しているテキストボックス名を、
A小計、B小計 とします。
Bグループのフッターセクションのフォーマット時に下記のように記述します。
Private Sub グループフッター3_Format(Cancel As Integer, FormatCount As Integer)
Cancel = (Me.A小計 = Me.B小計)
End Sub
要は、Aグループ内のBグループ数が1件ならA小計とB小計は同じになります。同じものを表示するのは無駄だということですよね。
同じなら、Cancel を True にしてそのセクションの出力をキャンセルしてます。
グループ内で集計テキストボックスを参照するとそのグループ内での集計値が取得できますので上記のコードでうまくいきます。
もし、マイナスの集計があり、たまたまA小計とB小計が同じになる可能性かあるなら、=Count(*) で件数を表示させるテキストボックスを配置しておいてそれを比較するようにすればいいでしょう。
通報 ...
これすごいですねぇ。試してみたら確かにBグループのフッターのformatイベントでAグループのフッターの小計が取れました。Aグループのフッターのformatイベント入る前なのでどうかと思ってたんですが計算自体は終わってる上にちゃんと自分のグループの数値が取れるんですね
テストデータ
レポートのグループ化の設定
グループ化:A、フッターにテキストボックス[A小計](=Sum([n]))
└グループ化:B、フッターにテキストボックス[B小計](=Sum([n]))
テストコード
出力結果
※未出力のフッターの集計がきちんととれてる(Me!A小計)
※レコードの参照はグループの最後のレコードっぽい(並び順指定してなかったらIDはなぜか降順に・・・)
グループヘッダーに集計用テキストボックス
=Sum()
、=Count()
を置いた場合でもちゃんとグループ内の集計が取得できますので、formatイベントに関係なくグループ全体の集計をしているみたいですね。ちなみに詳細セクションに集計関数を置くと全体の修正をするようです。一番目のレコードでも全体集計になります。
こちらの方法で1回うまくいったと思っていたのですが、「nullの値が不正です」との警告が出て、固まるようになりました。なにか間違っているのでしょうか…
ケアレスミスしてました…うまくいきました。