- ベストアンサー
LOOPやFor文で出来ないでしょうか。
- 現在帳票出力のコーディングをしております。帳票は8レコードで一枚で、8レコード以下になると、罫線が印刷されないため、ブランクのデータを作ることで対応しようと思っています。
- データ件数が8の倍数まで処理をつづけたいのですが、どのように記述すればいいか思案に苦しんでおります。
- イメージとしては、件数カウントしている数値を8で割り、その答えが8の倍数でない場合は小数点が出ると思います。要するに、整数というか小数点が出なくなるまで加算させるという条件ができればいいのかなと思っているのですが、それをコーディングにするにはどうすれば。。。と思っている次第です。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
8の倍数でストップすればいいんでしょ?だったら DATA/8 = INT(DATA/8) こいつが成立すれば止めればいい、ってだけなんじゃ?
その他の回答 (6)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
ページフッターに同じ位置に罫線を配置する手もあります。 Option Compare Database Const MaxRow = 8 Dim RowCount As Integer Private Sub ページフッターセクション_Format(Cancel As Integer, FormatCount As Integer) RowCount = 0 End Sub Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) If RowCount = MaxRow Then RowCount = 0 Me.MoveLayout = False Me.PrintSection = False Else RowCount = RowCount + 1 If RowCount < MaxRow Then Me.NextRecord = False Me.MoveLayout = True Else RowCount = 0 End If End If End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) RowCount = RowCount + 1 End Sub
お礼
ありがとうございます。 とても興味深い内容でした。 レポートで制御できれば、データベースでブランクを作らずに済みますね。 次回是非ともこちらの方法も視野に入れていきたいと思います。
- tkgoya
- ベストアンサー率0% (0/1)
n の倍数を判定したい場合は剰余を計算する「Mod演算子」を使用します。 m が n の倍数なら、m ÷ n の余りは 0 になりますので、下記のようにします。 Do Until KANRI_TANA_KENSU Mod 8 = 0 ---- 中略 ---- Loop ※但し、KANRI_TANA_KENSU が 0 の場合にも剰余は 0 になりますので注意が必要です。
お礼
なるほど、IF文で<>0を条件に入れてやれば いけそうですね。 とてもシンプルなコードでわかりやすいです。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
Do Until KANRI_TANA_KENSU Mod 8 = 0 でいいですね。 ただし、これは8件目でループを抜ける形になるので、 正しくは9かもしれません。 また、0から開始する場合は初回でループを抜けてしまう為、 宜しくありません。 (そこはロジックの書き方の問題)
お礼
ありがとうございます。 事前に条件文で絞り込んでこの処理を通せばクリアできそうです。 その辺はデバックしながら検証していきたいと思います。
- MSZ006
- ベストアンサー率38% (390/1011)
#3です。計算を誤りました。 レコード件数がXだとすると、 7-((X+7) mod 8) で追加すべき空白レコードの件数が出ます。 For~Nextで回せばどうでしょうか。
- MSZ006
- ベストアンサー率38% (390/1011)
レコード件数がXだとすると、 ((X+1) mod 8) -1 で追加すべき空白レコードの件数が出ます。 For~Nextで回せばどうでしょうか。
お礼
ありがとうございます。 訂正頂いた内容の物で一度検証してみたいと思います。
- emsuja
- ベストアンサー率50% (1065/2116)
KNRI_TANA_KENSU が整数なら If KANRI_TANA_KENSU Mod 8 = 0 Then Exit Do で Loop を抜け出せばいいのでは
お礼
ありがとうございます。 教えて頂いたとおりで処理されました。 INT型だと小数点が切り捨てられるという視点ですね。 簡単なことでも気が付かなかったです。 もっと精進いたします。