こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Microsoft Access2003での印刷

使用するAccess ( 2003 )

下記のようなCSVがあります。
       Field_A ,Field_B ,Field_C ,Field_D
1レコード目: A    ,B    ,     ,
2レコード目: A    ,     ,C    ,
3レコード目: A    ,     ,C    ,
4レコード目: A    ,     ,     ,D
5レコード目: A    ,     ,     ,D
6レコード目: A    ,     ,     ,D
7レコード目: A    ,     ,     ,D

Field_A は必ず埋まっていて、Field_Bは最初の1レコード目だけ。
Field_CとField_Dはレコードは可変で、Cが終了したらDになります。

この構成は他所から貰ってるだけなので、こちらでは変更したりできません。

この状態でMicrosoft Access を用いて下記のような印刷フォームを作成することは、可能でしょうか?
Access 自体は使用した事はありますが、複雑なフォームを作成した事はありません。
色々事例を調べてセクションという機能がある事は分かりました。

-------------------------------------
|
| A
|
| B
|
| C
| C
| 行が続くかぎり
|
|  D
| D
| 行が続くかぎり
|
|
|
| 締めの文言
-------------------------------------
 改頁したらAは必ず出力して続きから
-------------------------------------
|
| A
|
| D
| 行が続くかぎり
|
|
|
| 締めの文言
-------------------------------------


質問したい事
1、Accessで、このような事は可能でしょうか?
2、可能な場合、セクションを上手く活用するのでしょうか、
  それとも、何か異なる機能を使用するのでしょうか
  比較的簡単に実現できる方を教えて頂きたいです。

3、Accessでは難しい場合、なにか印刷できるようなソフトをご存知でしょうか?
  excelやwordの差込印刷では、無理かと思いました。

投稿日時 - 2014-09-03 15:10:39

QNo.8740874

暇なときに回答ください

質問者が選んだベストアンサー

強いて、Accessのレポート機能等を利用する必要はないと感じました。

01:先頭行の列1を出力する。
02:先頭行の列2を出力する。
03:次の行を読み込む。
04:列3が存在すれば列3を出力する。
05:列3が存在しない時は列4を出力する。
06:改頁する手前まで04、05を繰り返す。
07:締めの文言を出力する。
08:04~07を繰り返す。

以上のようなプログラムを書けませんか?仮に書けないとしたら、作表ソフトの出番かと思いますよ。要は、単なる作表作業ですから・・・。

1、Sheet1に呼び込む。
2、Sheet2の先頭で[締めの文言]を定義する。
3、先頭行の列1を出力する。
4、先頭行の列2を出力する。
5、03~07に相当する関数を定義する。
6、以下、ツツーッ。

こういうアプローチもあろうかと思いますよ。

投稿日時 - 2014-09-03 15:54:43

お礼

ご回答、並びに実際の例まで挙げていただきありがとうございます。
プログラミングはできないのですが、挙げて頂いたのを見ながら、Accessを作成していこうと思います。
本当にありがとうございました。

投稿日時 - 2014-09-04 10:24:30

ANo.1

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(9)

ANo.9

<補足>「締めの文言」の出力

Option Compare Database
Option Explicit
Dim isWriteFooter As Boolean

Private Sub グループフッター0_Format(Cancel As Integer, FormatCount As Integer)
  isWriteFooter = True
End Sub

Private Sub ページフッターセクション_Format(Cancel As Integer, FormatCount As Integer)
  Cancel = iisWriteFooter
  isWriteFooter = False
End Sub

添付図のように「締めの文言」を最後のページの行末に表示する場合は、少し工夫される必要があります。

投稿日時 - 2014-09-04 09:25:49

ANo.8

※グループ化しなければレコード順に出力されます。
※一度切りの出力であれば、それでもOKかと思います。

投稿日時 - 2014-09-04 02:41:25

ANo.7

【補足】列[ID]の付加が必要か?

添付図は、Col2 ではなく列[ID](非表示)で並び替えています。

投稿日時 - 2014-09-04 02:11:30

ANo.6

補足:レポート画像

投稿日時 - 2014-09-04 01:39:49

ANo.5

【訂正】実際にテストしたら・・・

先のやり方は出力順の制御に問題があって、結局は、つぎのようなクエリを作るのが一番でした。この場合、トップ行の複数化は無用です。

SELECT
 T1.Field1 AS Col1,
 T1.Field2 & T1.Field3 & T1.Field4 AS Col2
FROM T1;

これですと、リスト順に出力されるようです。

投稿日時 - 2014-09-04 01:33:00

ANo.4

「締めの文言」は各ページの下部に表示するのですね。
見落としてました。

前回の回答でレポートフッターに「締めの文言」を配置としましたが、
ページフッターに「締めの文言」を配置する、に訂正します。

投稿日時 - 2014-09-03 21:28:56

ANo.3

> 改頁したらAは必ず出力して続きから

という仕様があるので、Accessのレポートだと比較的に簡単にできます。

CSVファイルを、インポートまたはリンクします。
これをレポートのレコードソースとします。

ページヘッダーに、Field_A を配置します。
これですべてのページのヘッダー部に「A」が表示されます。

詳細セクションに、Field_B ,Field_C ,Field_D を重ねて配置します。
背景スタイルを「透明」にしておくか、印刷時縮小を「はい」にしておきます。

レポートフッターに「締めの文言」を配置します。

以上です。

投稿日時 - 2014-09-03 21:26:36

お礼

ご回答ありがとうございます。
重ねて配置という技?などは私では到底思いつきもしません。回答頂いたのを見ながらチャレンジしてみようと思います。ありがとうございました。

投稿日時 - 2014-09-04 10:27:16

ANo.2

補足:仮に Access を利用する場合は・・・。

1レコード目: A    ,B    ,     ,
1レコード目: A    ,B    ,     ,
2レコード目: A    ,     ,C    ,
3レコード目: A    ,     ,C    ,
4レコード目: A    ,     ,     ,D
5レコード目: A    ,     ,     ,D
6レコード目: A    ,     ,     ,D
7レコード目: A    ,     ,     ,D

上のように1レコード目を2行にすると、ほぼ何もしなくても目的を達成できるかと思います。

1、1レコード目を2行に。
2、テーブル[XXXX]に呼び込む。
3、ウィザードでレポート[XXXX]を生成する。
4、4つのフィールドを重ねる。
5、詳細部で1行目のAのみ Visibled=True にする。
6、詳細部で1行目以外のAを Visibled=False にする。
7、レポートの下部に[締めの文言]を付加する。

このような感じかと思います。

投稿日時 - 2014-09-03 19:55:46

あなたにオススメの質問