この質問内容ではコードの製作依頼になってますので、まずは自分でできるところまでコードを書いてみましょう。
といっても難しいと思いますので、ヒントだけ出しておきます。
1.[箱のシール枚数] が2の時、2枚出力する方法
1.a. VBAを使う方法
セクションのフォーマット時に Me.NextRecord=False とすることで次レコードへ移動しないので、同じレコードを続けて印刷できます。FormatCount引数で同じレコードを何回印刷したかを取得できますので、FormatCount < [箱のシール枚数]のとき Me.NextRecord=False とすれば、シール枚数まで繰り返し出力されます。
NextRecord プロパティ (Access) | Microsoft Docs
1.b. クエリを使う方法
数値型フィールドに 1 と 2 の2レコードを持つテーブルを作成する。
テーブル名 T_Num
フィールド名 Num 数値型
これをレポートのrecordソースクエリに追加する(結合はさせない)。
Numフィールドの抽出条件に
<=[箱のシール枚数]
と設定する。
これで指定したシール枚数分繰り返し出力されます。
2.いま何列目を出力するのかを取得する方法
モジュールレベル変数を宣言する。
フォマット時イベントでその変数に1加算する。
改段したら 1 に戻す。
3.シール枚数2の場合に2枚のシール間が改段されないようにする方法
3.a. 枚数2のレコードが3列目にくるときは、空白を挿入する
空白の出力は、フォーマットイベントで
Me.NextRecord = False
Me.PrintSection = False
とすることで空白を出力することが可能です。
3.b. 枚数2のレコードが3列目にくるときは、強制改段させる
NewRowOrColプロパティで改段を制御できます。
NewRowOrCol プロパティ (Access) | Microsoft Docs
以上を組み合わせてコードを書いてみてください。それでうまくいかないなら、できたところまでのコードを提示してうまくいかない部分を質問してください。
おまけ
もしデータの出力順を変更してもいいのなら、
枚数2のデータが連続すると、3列目の空白も連続することになり、用紙が無駄になる。
枚数1のレコード内で連番を取得(入力)
枚数2のレコード内で連番を取得(入力)
としておいて、この連番で並び替えを設定しておけば、
1列目 2列目 3列目
枚数1 枚数2 枚数2
枚数1 枚数2 枚数2
・・・
というように出力されて空白シールが最小限にできます。
グループ毎の連番は下記を参考に。
グループ毎連番を自動入力する関数 - hatena chips
サンプルコード追記
簡単なサンプルを作成してみました。
複数シールの出力は下記の方法にしました。
1.b. クエリを使う方法
レポートのレコードソースのクエリは下記になります。
テーブル1は実際のテーブル名にしてください。
sql
1SELECT テーブル1.*, T_Num.Num FROM テーブル1, T_Num
2WHERE T_Num.Num<=[箱のシール枚数];
また、現在何列目かは、Me.Left で取得する方法にしました。
Me.Left で用紙の左からの距離を取得できます。
詳細セクションのフォーマット時に下記のように記述すると、イミディエイトウィンドウに結果が出力されます。
vba
1Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
2 Debug.Print Me.Left
3End Sub
イミディエイトの結果(印刷設定で変わります。)
360
3951
7542
360
3951
7542
3列目は左から7542(TWIPS)の位置ということになります。(567TWIPS≒1cm)
レポートの「グループ化と並び替え」で下記の順で並び替えを昇順に設定します
- 顧客コード(テーブルの主キーフィールド名)
- Num
あとは詳細セクションのフォーマット時のイベントプロシージャを下記のように記述します。
vba
1Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
2 If Me.Left > 7000 And Me.Num = 1 And Me.箱のシール枚数 = 2 Then
3 Me.NextRecord = False
4 Me.PrintSection = False
5 End If
6End Sub
3列目判定は余裕をもって Me.Left > 7000
としましたが、Debug.Print Me.Left
の結果を元に調整してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。