Microsoft Access 掲示板

空白行を入れた印刷について

4 コメント
views
4 フォロー

よろしくお願いいたします。

| 名前    | 性別    |
| 猫      | オス    |
| 猫      | メス    |
| 猫      | メス    |
| 犬      | オス    |
| 犬      | オス    |
| 犬      | メス    |

このようなテーブルがあったとします。
これを印刷したいのですが、①名前が変わるところ、②性別が変わるところ
それぞれで1行の空白を作った状態で印刷したいです。
さらに、③A4の紙いっぱい(15行)に表(罫線)を入れたい。

| 名前    | 性別    |
| 猫    | オス   |
| 空行   |      |
| 猫      | メス    |
| 猫      | メス    |
| 空行   |      |
| 犬      | オス    |
| 犬      | オス    |
| 空行   |      |
| 犬      | メス    |
| 空行   |      |
| 空行   |      |
(....15行まで)

よろしくお知恵をお貸しください。

VBA初心者
作成: 2020/09/22 (火) 14:16:27
通報 ...
1

印刷はレポートでするのですよね。

まずは、

③A4の紙いっぱい(15行)に表(罫線)を入れたい。

に関しては、下記を参考にしてください。

レコードがない場合も用紙の最後まで罫線を出力する - hatena chips

、①名前が変わるところ、②性別が変わるところ
それぞれで1行の空白を作った状態で印刷したいです。

レポートの「グループ化/並べ替え」の機能で、

並べ替えの追加で「名前」フィールドを追加。
その後、グループの追加で「性別」フィールドを追加。
「ヘッダーセクションなし、フッターセクション付き」に設定。

画像1

以上です。
 

2
VBA初心者 2020/09/22 (火) 19:00:18 4f22d@65bb5 >> 1

ありがとうございます。
おかげさまで、上記の質問の内容は出来ましたが、追加がありました。
| 番号  | 名前    | 性別    |
| 1    | 猫      | オス    |
| 6    | 猫      | メス    |
| 2    | 猫      | メス    |
| 5    | 犬      | オス    |
| 4    | 犬      | オス    |
| 3    | 犬      | メス    |

このデータの場合、最優先は番号だとしたら、

| 番号  | 名前    | 性別    |
| 1     | 猫      | オス    |
| 空白  |     |       |
| 2     | 猫      | メス    |
| 空白  |     |       |
| 3     | 犬      | メス    |
| 空白  |     |       |
| 4     | 犬      | オス    |
| 5     | 犬      | オス    |
| 空白  |     |       |
| 6     | 猫      | メス    |

このようにしたいです。
グループで番号を優先にしても名前を優先にしても
うまくいかなかったので、大変申し訳ございませんが、
ご教授願います。

3

VBAが必要になりますね。

まずは、グループ化/並べ替えは、[番号]フィールドのみグループ化して、下記のように設定します。

昇順 ヘッダーセクション付き フッターセクションなし

リボンの[コードの表示]をクリックしてVBAウィンドウを表示させます。
そこに下記のコードをコピーして貼り付けてください。

Option Compare Database
Option Explicit

Private preValue As String

Private Sub グループヘッダー1_Format(Cancel As Integer, FormatCount As Integer)
    If preValue = "" Or preValue = Me.名前.Value & " " & Me.性別.Value Then
        Cancel = True
    End If
    preValue = Me.名前.Value & " " & Me.性別.Value
End Sub

Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer)
    preValue = ""
End Sub

これでご希望の結果になると思います。

やっていることは、
モジュールレベル変数 preValue に直前のレコードの値を格納しておいて、
現在のレコードの値と比較して同じたったら、Cancel = True でヘッダーを出力しない。
異なっていたらそのまま出力とするということです。

ページヘッダーセクションで preValue = "" としているのは、
ページの先頭にレコードの前に空白行が出力されるのを防ぐためです。

4
VBA初心者 2020/09/23 (水) 19:22:42 4f22d@65bb5

ありがとうございました!思い通りの印刷が出来ました。