タックシールを使って宛名の印刷をすると、シート1枚すべてのシールを丁度使い切ることはなく、ほとんどの場合余りがでます。
余ったシールを印刷しようとすると使用した分の空白レコードが必要になります。この空白レコードをACCESSのSQLで実現してみました。
SQLは UNION 句を使います。空レコードのレコード数だけ UNION 句で追加します。
また、別な方法も後日試したいと思います。
Access テーブル「名簿」の作成
フィールド「ID」「住所」「氏名」の極簡易なテーブルです。
Access フォーム「名簿」の作成
フォームのフォーマット
テキストボックスを3個配置します。テキストボックスの名前とデータは「ID」「住所」「氏名」としています。
イベントの作成
イベントの作成は、名簿アイコン(下画像の左上)の下黒の■を右クリックして表示されたメニューの下「フォームのプロパティ」を左クリックすると、プロパティシートが右に開きます。
タブ「イベント」を左クリックして、表示されたメニューの「読み込み時」の右にある「…ボタン」の左隣のボタンをクリックして「イベントプロシージャ」を選択後「…ボタン」をクリックするとコード入力フォームが開きます。
コード入力
Private Sub Form_Load() Dim mysql As String Dim Res As Variant Dim I As Long Res = InputBox("使用済みの枚数", "入力") For I = 1 To Res mysql = mysql & "(SELECT " mysql = mysql & -I & " AS NUM" mysql = mysql & ", '' AS ID" mysql = mysql & ", '' AS 住所" mysql = mysql & ", '' AS 氏名" mysql = mysql & " FROM 名簿)" mysql = mysql & " UNION " Next I mysql = mysql & "(SELECT " mysql = mysql & "ID AS NUM" mysql = mysql & ", ID " mysql = mysql & ", 住所" mysql = mysql & ", 氏名" mysql = mysql & " FROM 名簿);" Me.RecordSource = mysql End Sub
空レコードの SQL は元のテーブル「名簿」にないフィールド NUM を値 -I (レコードで値が異なる)で追加しています。値が異ならないとグループ化されて1レコードしか追加できません。
結果はソートされますので、空レコードを先頭部分にするため空レコードのSQLの NUM は – の値にし、本データの NUM の値は ID にしています。
フォームのオープン
入力フォームの表示
コード入力後、フォーム「名簿」をオープンしてみます。入力フォームが開くので枚数を入力します。
例では5を入力しています。OKボタンをクリックして進みます。
SQLをレコードソースにセット
5行空白レコードができました。
プロシージャのコードを修正
インプットボックスに入力される値は、期待されるものと違うものが入力されることがあるので、チェックを設けます。
Option Compare Database Option Explicit Private Sub Form_Load() Dim mysql As String Dim Res As String Dim I As Long Res = InputBox("使用済みの枚数", "入力") mysql = "" If StrPtr(Res) = 0 Or Res = "" Then '何もしません ElseIf Not IsNumeric(Res) Then '何もしません ElseIf Int(Res) = 0 Then '何もしません Else For I = 1 To Res mysql = mysql & "(SELECT " mysql = mysql & -I & " AS NUM" mysql = mysql & ", '' AS ID" mysql = mysql & ", '' AS 住所" mysql = mysql & ", '' AS 氏名" mysql = mysql & " FROM 名簿)" mysql = mysql & " UNION " Next I mysql = mysql & "(SELECT " mysql = mysql & "ID AS NUM" mysql = mysql & ", ID " mysql = mysql & ", 住所" mysql = mysql & ", 氏名" mysql = mysql & " FROM 名簿);" End If If mysql = "" Then mysql = mysql & "SELECT " mysql = mysql & "ID AS NUM" mysql = mysql & ", ID " mysql = mysql & ", 住所" mysql = mysql & ", 氏名" mysql = mysql & " FROM 名簿;" End If Me.RecordSource = mysql End Sub