Access2000で「所属コード」と「社員氏名」が入っているレポートを作りました。
枠線もつけてひととおりできたのですが、改ページの方法がよくわかりません。
以下の条件で改ページを行なうにはどうしたらよいのでしょうか?
データは、所属コード毎にまとまっていて、さらに同じ所属コードのなかでは社員氏名(50音順)になっています。空白のデータ行はありません。

条件
1.1ページ10人で改ページをする。
2.所属コードが変わったら、10人に満たなくても改ページする。
3.所属コードが変わって改ページをする場合、空の行を補って1ページは常に10人分とする。
以上のような条件を満たす改ページ設定はできるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

なんかカッコ悪いコードになっちゃいましたが


勘弁してください。

DoCmd.RunSQL "DELETE W_印刷用.* FROM W_印刷用;"

Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim RS2 As ADODB.Recordset
Dim 件数 As Integer
Dim 空白数 As Integer
Dim 退避所属コード As Long
Dim 番号 As Long

Set CN = CurrentProject.Connection
Set RS = New ADODB.Recordset
Set RS2 = New ADODB.Recordset

RS.Open "T_社員", CN, adOpenKeyset, adLockOptimistic
RS2.Open "W_印刷用", CN, adOpenKeyset, adLockOptimistic

RS.MoveFirst
番号 = 1
件数 = 1

Do Until RS.EOF

退避所属コード = RS!所属コード

Do Until 退避所属コード <> RS!所属コード
RS2.AddNew
RS2!番号 = 番号
RS2!社員名 = RS!社員名
RS2!所属コード = RS!所属コード
RS2.Update
RS.MoveNext
If RS.EOF Then Exit Do
番号 = 番号 + 1
件数 = 件数 + 1
Loop

If 件数 > 10 Then
件数 = (件数 Mod 10)
End If

空白数 = 10 - 件数

番号 = 番号 + 1
For I = 1 To 空白数
RS2.AddNew
RS2!番号 = 番号
RS2!所属コード = 退避所属コード
RS2.Update
番号 = 番号 + 1
Next I

件数 = 1

Loop

RS.Close
RS2.Close
CN.Close

テーブル
・T_社員
 社員名 テキスト型
 所属コード 数値型(長整数)
・W_印刷用
 番号 数値型(長整数)
 社員名 テキスト型
 所属コード 数値型(長整数)

で作成しました。

もっと簡潔にできるとは思いますが
そこはお願いします。
もちろんレポートでグループヘッダーを所属コードで
作成しておかないとこのままW_印刷用をそのまま印刷しても、別所属コードで改ページされません。
(1ページ10件ぎりぎりで作成しておけば別ですが)
    • good
    • 0
この回答へのお礼

ありがとうございます。とっても我儘なお願いにもかかわらず、コードを公開していただいて、とっても助かります。
このコードを参考にがんばってみます。本当にありがとうございます。

お礼日時:2001/10/23 08:33

これはVBAを使用しないと解決できないかと思います。


幾つかの方法があって、まず1つはデータをまた別なテーブルへ移行し、同時に空白行を作成する方法。

例えば
元データテーブル    印刷時用一時テーブル
氏名   所属  →  氏名   所属
あーさん  1     あーさん  1      
かーさん  1     かーさん  1
いーさん  2     空白行   1
きーさん  2     以下10行になるまで空白行
            いーさん  2
            きーさん  2
            空白行   2
            以下10行になるまで空白行
このような印刷時用の一時テーブルをVBAにて作成して
それをレポートに使用します。
このとき1つの所属で10人以上いた場合は2ページ目に
わたりますので、(1所属の件数 MOD 10)で
余りを算出し、余りが0以上ならその値を10から引けば
作成する空白行数が分かります。

2つ目は印刷時にレポートにVBAを使用して制御する方法です。
NextRecordプロパティの値を調べて次のレコードを印刷するかと判断します。

まだ方法があるとは思いますが、私は1つ目の方法でいつも制御しています。
VBAの参考本にこの類のサンプルプログラムがあるので
参考にしてみてはいかがでしょうか。

ではではがんばってください。

この回答への補足

早速の回答ありがとうございます。
回答文を読ませていただき、仕掛けについては「なるほど」と思ったのですが
実際のコードの記述については難しいみたいです。
そこで、もし差し支えがなければ、1つ目の方法について実際のコードを公開していただくことはできないでしょうか。
(撫しつけなお願いですいません)

補足日時:2001/10/19 21:57
    • good
    • 0

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


というマイクロソフトのHPを紹介します

参考URL:http://www.microsoft.com/JAPAN/support/kb/articl …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

参考表示していただきました、ホームページを見てみます。

お礼日時:2001/10/19 21:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Q改ページ条件を簡単に設定する方法

大変困っております。
データベースのある列を指定して、入っている値が変われば改ページという設定をしたいのですが、調べてもなかなか出てきません。いくつか答は見つかったのですが、VBAを書いて実現する方法ばかりで、初心者の私にはチンプンカンプンです。
なんとか、上記のしくみをマクロなどで簡単に実現する方法はないでしょうか?お願いします!!

Aベストアンサー

こんにちは

 メニュー[データ]-[集計]には、[グループごとに改ページを挿入する]というのがあります。

参考URL:http://www2.odn.ne.jp/excel/

QAccessのフォームを改ページしたい

Access2002で、単票形式フォームで例えば、フィールドが10あるとすれば、5つ目くらいのフィールドでページを区切るようにしたくて、コントロールの間に「改ページ」コントロールを挿入したのですが、フォームビューで確認してもまったくかわりません。手元のテキスト(MOT+Access2000)では、「改ページ」コントロールを挿入するだけでPageUp、PageDownキーによりページを切り替えられると説明があるのですが・・・
だれかご存知の方、教えてくださいm(__)m

Aベストアンサー

改ページ コントロールを使うと、フォームやレポートの新しい画面や印刷ページの
開始位置を決めることができます。
フォームでは、改ページはフォームの "DefaultView/既定のビュー" プロパティ
に[単票フォーム]を設定した場合にのみアクティブになります。
改ページは、フォームのデータシートには影響を与えません。
フォーム ビューで、前の改ページまたは次の改ページに移動するには、PageUp または PageDown キーを押します。
という事です。

>フォームビューで確認してもまったくかわりません。
これは例えばフォームのデザインとビューで表示した大きさが同じであればUp・
Downのキーを押してもフォーム自体の変化は見られないと思います。
レコードがDownで次、Upで前のレコードに移動するだけになります。
フォームのビューの表示サイズよりデザインが下に長ければDownで改ページコント
ロールの位置より下が表示されます。
試しにフォームの表示の大きさを上下短くしてPageUp・Downのキーを押してみて
ください。

改ページ コントロールを使うと、フォームやレポートの新しい画面や印刷ページの
開始位置を決めることができます。
フォームでは、改ページはフォームの "DefaultView/既定のビュー" プロパティ
に[単票フォーム]を設定した場合にのみアクティブになります。
改ページは、フォームのデータシートには影響を与えません。
フォーム ビューで、前の改ページまたは次の改ページに移動するには、PageUp または PageDown キーを押します。
という事です。

>フォームビューで確認してもまったくかわりません。
...続きを読む

QAccessで改段を条件によって変えれませんか?

学級名簿を作っています。
性別で改段しているのですが、最後に空白のページが出てしまいます。
各組は1ページに収まるので組で改ページして、女子の場合は改段しないようにしたいのですが、できるでしょうか?
よろしくお願いいたします。

Aベストアンサー

もしアクセスの操作だけで可能な問題で、見当はずれの場合は許してください。
エクセルに持ってきて、下記VBAでやれば出来ると思います。縦列順序に2列に印刷すると言うことは、結構プログラムが難しいことのようですが、男女別に振り分けるのは更にプログラムロジックを考える必要がある。
(テストデータ)
組    性別   名前(手抜き、本当は漢字名)
1男m1
1女f1
1女f2
1女f3
1男m2
1女f4
1男m3
1男m4
1男m5
1女f5
1男m6
1女f6
1男m7
1女f7
1女f8
2女f9
2女f10
2女f11
2男m8
2女f12
2男m9
2女f13
2男m10
2女f14
2男m11
3女f15
(結果)
第1ページ
m1f1
m2f2
m3f3
m4f4
m5f5
m6f6
m7f7
f8
第2ページ
m8f9
m9f10
m10f11
m11f12
f13
f14
(コード)VBA
Sub test01()
i = 1
j = 1
k = 1
Dim ws1 As Worksheet
Set ws1 = Worksheets("sheet1")
Dim ws2 As Worksheet
Set ws2 = Worksheets("sheet2")
m = ws1.Cells(1, "A")
'------
p00:
If ws1.Cells(i, "A") = "" Then End
If ws1.Cells(i, "A") > m Then
Range(ws2.Cells(1, 1), ws2.Cells(k, "B")).PrintOut
m = ws1.Cells(i, "A")
Range(ws2.Cells(1, 1), ws2.Cells(k, "B")).ClearContents
j = 1
k = 1
'-----
End If
If ws1.Cells(i, "B") = "男" Then
ws2.Cells(j, "A") = ws1.Cells(i, "C")
j = j + 1
Else
ws2.Cells(k, "B") = ws1.Cells(i, "C")
k = k + 1
End If
i = i + 1
GoTo p00
End Sub
アクセスVBAでやるならCellsが使えないので
1ページ分の、各列(フィールド)数だけの配列を用意して、まず組が変るまで配列にためて、変ったところで配列データを印刷すればできる。だからロジックはほぼそのまま使える。ただMDBのファイルを読む方法を勉強する必要がある(市販本に載ってますが)。

もしアクセスの操作だけで可能な問題で、見当はずれの場合は許してください。
エクセルに持ってきて、下記VBAでやれば出来ると思います。縦列順序に2列に印刷すると言うことは、結構プログラムが難しいことのようですが、男女別に振り分けるのは更にプログラムロジックを考える必要がある。
(テストデータ)
組    性別   名前(手抜き、本当は漢字名)
1男m1
1女f1
1女f2
1女f3
1男m2
1女f4
1男m3
1男m4
1男m5
1女f5
1男m6
1女f6
1男m7
1女f7
1女f8
2女f9
2女f10
2女f11
2男m8...続きを読む

Q改ページについて

Access2000でレポートを作成しそのレポートに
リストボックを配置し、リストボックスの行数が
特定の行数になった場合に改ページをしたいと
思っていますが、改ページ コントロールを使って
改ページをするのでしょうか?

参考になるサイトでもいいので教えてください。

Aベストアンサー

レポート内にリストボックスを配置するケースは無いんじゃないかと?
フォーム内でしたら、リストボックスやコンボボックスで
ユーザーに選択してもらうために使用しますけど。。。

サブレポートを調べてみてください。たとえば、
http://office.microsoft.com/ja-jp/access-help/HA010209281.aspx
2007の説明ですが基本的には変わってません。

Qaccess 改ページコントロール

作成したフォームが縦長の為、マウスホイールでなんとか動かせないものかと調べてみたら
改ページコントロールを使ってマウスホイールを動かした時にフォーム内でページが変わるというVBをネットで見つけました
組み込んで使おうとおもったのですが、3頁以上は文章を変えないといけないとのこと
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1283883887

VBはさっぱり素人なのでどこをどうしたらいいのかわかりません
わかられる方よろしくお願いします。


Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
If Count > 0 Then
DoCmd.GoToPage 2
Me![ページ2の先頭テキストボックス名].SetFocus
Else
DoCmd.GoToPage 1
Me![ページ1の先頭テキストボックス名].SetFocus
End If
End Sub


ちなみにコレを組み込んでみたのですがエラーが出て動きませんでした。。。
頁番号が無いとエラー文にはかかれています。
(コマンド文自体は間違ってないようで、実際に動いている人はいる様です)
自分の環境が悪いのか。。。この問題もわかればよろしくお願いします。

作成したフォームが縦長の為、マウスホイールでなんとか動かせないものかと調べてみたら
改ページコントロールを使ってマウスホイールを動かした時にフォーム内でページが変わるというVBをネットで見つけました
組み込んで使おうとおもったのですが、3頁以上は文章を変えないといけないとのこと
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1283883887

VBはさっぱり素人なのでどこをどうしたらいいのかわかりません
わかられる方よろしくお願いします。


Private Sub Form_MouseWheel(ByVal Page...続きを読む

Aベストアンサー

後追い失礼致します。
(私事・些事で時間が取れなかったもので・・・)

SendKeysを使用しているため、安定動作に若干不安要素がありますが(汗)、
以下の処理ではいかがでしょうか。
(フォームビューで、キーボードのPageUp/PageDownキーを押したときと同じ
 動作をさせています)

Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
  If Count > 0 Then
    SendKeys "{PGDN}"
  Else
    SendKeys "{PGUP}"
  End If
End Sub


なお、本当であれば、1つのフォームに表示するコントロールはもっと減らして、
減らしたコントロールは必要に応じてポップアップフォームなどで別途表示、
とすることが薦められていますので、併せて参考まで。
(例えば、社員情報を登録・表示する際に、ベースとなるフォームでは
 社員本人の情報のみとして、家族については配偶者の有無や人数のみを
 表示し、いる場合はコマンドボタンでその情報を表示するポップアップフォーム
 を展開、といった感じです)

※1つのテーブルにそれらの情報すべてが含められている場合は、テーブルの
 分割(正規化)も必要になります。
 ・・・改修となると非常に労力を要しますので、今後の参考までに、という
 ことで・・・(汗)

後追い失礼致します。
(私事・些事で時間が取れなかったもので・・・)

SendKeysを使用しているため、安定動作に若干不安要素がありますが(汗)、
以下の処理ではいかがでしょうか。
(フォームビューで、キーボードのPageUp/PageDownキーを押したときと同じ
 動作をさせています)

Private Sub Form_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
  If Count > 0 Then
    SendKeys "{PGDN}"
  Else
    SendKeys "{PGUP}"
  End If
End Sub


なお、本当であれば、1つのフォームに表示...続きを読む


人気Q&Aランキング

おすすめ情報