No.3ベストアンサー
- 回答日時:
下準備。
T1workテーブルを作成します。クエリ2のフィールドにIDフィールドを加えます。
ID 長整数型
順番,
出荷日,
客先,
依頼№,
品番,
製品名,
ロット№,
本日出荷数,
単価,
金額,
返却・修正,
完納,
完納時出荷数,
計算上金額
ID以外のデータ型やフィールドサイズはオリジナルと合わせてください。
主キーの設定やインデックスの設定は不要です。
※返却・修正フィールドの・中黒はAccessが誤動作しますから止めておくべきです。
下記コードではそのままにしています。
また、機種依存文字の№も同様です。
T1workテーブルを元にレポートを作成します。並び順にはIDを指定。
>現在、そのクエリの結果をフォームにし印刷しています。
フォームにコマンドボタンを置いて印刷するようにします。
Private Sub CMDテスト_Click()
Const rowNum As Long = 8 '←ひと区切りの行(レコード)数をここで指定
Dim DB As Database
Dim RsFrom As DAO.Recordset, RsTo As DAO.Recordset
Dim i As Long, j As Long, smallSum As Double
Set DB = CurrentDb
DB.Execute "DELETE * FROM T1work" '既存レコード消去
Set RsFrom = Me.Recordset.Clone
Set RsTo = DB.OpenRecordset("T1work", dbOpenTable, dbDenyRead, dbPessimistic)
Do Until RsFrom.EOF
i = i + 1
j = j + 1
RsTo.AddNew
RsTo!ID = j
RsTo!順番 = RsFrom!順番
RsTo!出荷日 = RsFrom!出荷日
RsTo!客先 = RsFrom!客先
RsTo!依頼№ = RsFrom!依頼№
RsTo!品番 = RsFrom!品番
RsTo!製品名 = RsFrom!製品名
RsTo!ロット№ = RsFrom!ロット№
RsTo!本日出荷数 = RsFrom!本日出荷数
RsTo!単価 = RsFrom!単価
RsTo!金額 = RsFrom!金額
RsTo![返却・修正] = RsFrom![返却・修正]
RsTo!完納 = RsFrom!完納
RsTo!完納時出荷数 = RsFrom!完納時出荷数
RsTo!計算上金額 = RsFrom!計算上金額
smallSum = smallSum + RsFrom!金額
RsTo.Update
RsFrom.MoveNext
If i Mod rowNum = 0 Then '小計行挿入
RsTo.AddNew
j = j + 1
RsTo!ID = j
RsTo!製品名 = "【 小 計 】"
RsTo!金額 = smallSum
RsTo.Update
smallSum = 0
End If
Loop
If i Mod rowNum <> 0 Then
RsTo.AddNew
j = j + 1
RsTo!ID = j
RsTo!製品名 = "【 小 計 】"
RsTo!金額 = smallSum
RsTo.Update
End If
RsFrom.Close: Set RsFrom = Nothing
RsTo.Close: Set RsTo = Nothing
Set DB = Nothing
DoCmd.OpenReport "レポート名", acViewPreview
End Sub
でどうですかね?
この回答へのお礼
お礼日時:2015/07/08 00:10
nicotinismさん、ありがとうございます。
しっかり表示されました。
私の分かりにくい説明でお手数をおかけしました事を、お詫び申し上げます。
本当にありがとうございました。
No.2
- 回答日時:
なにやらややこしそうですね。
フォームのレコードソースに指定してある『選択クエリ2』
(レポートに使用したいクエリ)のSQL文を載せられますか?
特に大事なのは並び替えの指定がどうなっているかです。
前回回答でORDER BY 句の指定をしていませんでしたので
異なる環境で実行した場合に並び順が違ってくる危険性が大でした。
並び順にこだわらなく、とにかく8行ごとなら考える必要はありません。
再確認ですが、レポートの1ページに8行表示し末行に小計・・・ではなく
1ページに2・30行ずらっと印刷し8行ごとに小計行を挟み込む
(前回回答の最後のイメージ)で良いのですよね。
No.1
- 回答日時:
べたな方法ですが出力用のワークテーブルに書き出して
それをレポートのレコードソースにする方が簡単でしたので。
そちらの情報が全くないので適当に
元テーブル名をT1とします。
FF1 | FF2
1 | ABC
2 | BBC
3 | AAA
4 | B
5 | FF
6 | GG
だとしてFF1の小計を出力用に取ることにします
ワークテーブルのフィールドを、FF1|FF2|順番とします。
ワークテーブル名はT1work
標準モジュールに
Sub FillTable()
Dim DB As Database
Dim RsFrom As DAO.Recordset
Dim RsTo As DAO.Recordset
Dim i As Long, j As Long, smallSum As Double
Const rowNum As Long = 3 '←ひと区切りの行(レコード)数をここで指定
Set DB = CurrentDb
DB.Execute "DELETE * FROM T1work" '既存レコード消去
Set RsFrom = DB.OpenRecordset("SELECT * FROM T1", dbOpenSnapshot)
Set RsTo = DB.OpenRecordset("T1work", dbOpenDynaset)
Do Until RsFrom.EOF
i = i + 1
If i Mod rowNum <> 0 Then
RsTo.AddNew
j = j + 1
RsTo!順番 = j
RsTo!FF1 = RsFrom!FF1
RsTo!FF2 = RsFrom!FF2
smallSum = smallSum + RsFrom!FF1
RsTo.Update
RsFrom.MoveNext
Else
RsTo.AddNew
j = j + 1
RsTo!順番 = j
RsTo!FF1 = RsFrom!FF1
RsTo!FF2 = RsFrom!FF2
smallSum = smallSum + RsFrom!FF1
RsTo.Update
RsTo.AddNew
j = j + 1
RsTo!順番 = j
RsTo!FF2 = "小計"
RsTo!FF1 = smallSum
RsTo.Update
smallSum = 0
RsFrom.MoveNext
End If
Loop
If i Mod rowNum <> 0 Then
RsTo.AddNew
j = j + 1
RsTo!順番 = j
RsTo!FF2 = "小計"
RsTo!小計 = smallSum
RsTo.Update
End If
RsFrom.Close: Set RsFrom = Nothing
RsTo.Close: Set RsTo = Nothing
Set DB = Nothing
End Sub
とすればT1workは
FF1 | FF2| 順番
1 | ABC| 1
2 | BBC| 2
3 | AAA| 3
6 |小計 | 4
4 | B | 5
5 | FF | 6
6 | GG | 7
15 |小計 | 8
となりますので[順番]で並べ替えて出力するように設定すればおしまい。
クエリの場合も考え方は一緒です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 非表示にしたい行をグループ化して折り畳み 4 2022/09/17 20:17
- Access(アクセス) Accessのリンクテーブルのパスを相対パスにする方法について教えて頂きたいです 1 2023/02/08 13:29
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- その他(パソコン・スマホ・電化製品) EXCELのSUMPRODUCT関数について 2 2022/09/21 17:30
- 相続税・贈与税 集金方法について 3 2023/01/14 19:04
- Excel(エクセル) ピボットテーブル集計表について。ピボットテーブルで集計を行うとき、内訳集計ではなく、通常集計表にする 2 2023/08/10 07:16
- Excel(エクセル) 【マクロ】同じフォルダ内にある複数ブックから1つのブック内の1シートにデータを集めたい 6 2022/09/28 18:16
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで追加した項目に全て...
-
Accessを開きなおすとテキスト...
-
Accessで、1つの項目に複数の...
-
テーブルでメモ型になっている...
-
テキストボックスにクエリ結果...
-
access フォームを開くと「パ...
-
Accessのテーブルのフィールド...
-
Access2013 レポートで一定行数...
-
Accessで、テーブルに入力した...
-
Access で 特定の文字の個数を...
-
SQLステートメントのFROM句・・・
-
accessvba 複数条件でFilterを...
-
ACCESSで2つフィールドの日付...
-
アクセスのクエリ 1文字以上を...
-
ACCESSからEXCELへのエクスポート
-
フォームで入力された文字をク...
-
Access:値が求めたい値の2倍...
-
クエリの一つのフィールドのIIF...
-
Accessのクエリでハイパーリン...
-
追加クエリでテーブル全体を指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで、1つの項目に複数の...
-
アクセスで追加した項目に全て...
-
Accessのテーブルのフィールド...
-
テキストボックスにクエリ結果...
-
Accessを開きなおすとテキスト...
-
テーブルでメモ型になっている...
-
Access:値が求めたい値の2倍...
-
Accessで、テーブルに入力した...
-
Access で 特定の文字の個数を...
-
Accessのクエリでハイパーリン...
-
ACCESSで2つフィールドの日付...
-
アクセスのクエリ 1文字以上を...
-
追加クエリで特定フィールドの...
-
accessでの文字列の混ざった連...
-
途中で改行されたCSVをAccessに...
-
更新クエリをリンクデータベー...
-
Access2002の重複クエリで大文...
-
Accessの電話番号フィールド
-
accessvba 複数条件でFilterを...
-
access フォームを開くと「パ...
おすすめ情報
本当にありがとうございます。
説明不足ですみません。
現状の説明です。
製品情報、加工数等を抜き出している選択クエリから
さらに抜き出した選択クエリ1を作成してあります。
エクセルに、製品の加工単価が入力されているので、そのエクセルとの
リンクテーブル1を作成してあります。
選択クエリ1とリンクテーブル1で、選択クエリ2を作成し
レコードごとに単価×数量=金額を計算させて
選択クエリ2の金額フィールドに表示しています。
現在、そのクエリの結果をフォームにし印刷しています。
印刷対象のフィールド数は13あります。
その中の金額フィールドの8行ごとの集計が対象です。
私自身がVBAは初心者レベルなので、お答え頂いた
コードを、何とか利用してみようと試みましたが
うまくできませんでした。
ご教授頂いたコードを生かし結果をえるには
どこをどう変えればいいでしょうか?
SELECT Q_本日出荷.順番, Q_本日出荷.出荷日, Q_本日出荷.[客先], Q_本日出荷.依頼№, Q_本日出荷.品番, Q_本日出荷.製品名, Q_本日出荷.[ロット№], Q_本日出荷.本日出荷数, [客先取扱商品単価表].単価, IIf(Int([計算上金額])=[計算上金額],[計算上金額],Int([計算上金額]+1)) AS 金額, Q_本日出荷.返却・修正, Q_本日出荷.完納, Q_本日出荷.完納時出荷数, [本日出荷数]*[単価] AS 計算上金額
FROM Q_本日出荷 INNER JOIN 客先取扱商品単価表 ON Q_本日出荷.品番 = [客先取扱商品単価表].品番
WHERE (((Q_本日出荷.[客先])=True))
ORDER BY Q_本日出荷.製品名 DESC;
メーカー名は客先に変更しました
印刷は、ズラッと行って、8行ごと小計でOKです
SELECT Q_本日出荷.順番, Q_本日出荷.出荷日, Q_本日出荷.[客先], Q_本日出荷.依頼№, Q_本日出荷.品番, Q_本日出荷.製品名, Q_本日出荷.[ロット№], Q_本日出荷.本日出荷数, [客先取扱商品単価表].単価, IIf(Int([計算上金額])=[計算上金額],[計算上金額],Int([計算上金額]+1)) AS 金額, Q_本日出荷.返却・修正, Q_本日出荷.完納, Q_本日出荷.完納時出荷数, [本日出荷数]*[単価] AS 計算上金額
FROM Q_本日出荷 INNER JOIN 客先取扱商品単価表 ON Q_本日出荷.品番 = [客先取扱商品単価表].品番
WHERE (((Q_本日出荷.[客先])=True))
ORDER BY Q_本日出荷.製品名 DESC;
メーカー名は客先に変更しました
印刷は、ズラッと行って、8行ごと小計でOKです