![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
初心者です。Access レポートで下記のように作成したいのですが、なんか重複データで引っかかってしまいました。
※(1)作成したいレポート
分類 名前 地名 小計 合計 総合計
--------------------------------------------------
果物 りんご 青森 100 170 1070
千葉 50
山梨 20
バナナ 千葉 450 450
みかん 栃木 300 450
150
----------------------------------------
ワイン AAAA ドイツ 500 800 1000
イタリア 300
BBBB ドイツ 200 200
↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓
※(2)クエリで下記のようなデータがあります。
分類 名前 地名 小計 合計 総合計
--------------------------------------------------
果物 りんご 青森 100 170 1070
果物 りんご 千葉 50 170 1070
果物 りんご 山梨 20 170 1070
果物 バナナ 千葉 450 450 1070
果物 みかん 栃木 300 450 1070
果物 みかん 栃木 150 450 1070
--------------------------------------------------
ワイン AAAA ドイツ 500 800 1000
ワイン AAAA イタリア 300 800 1000
ワイン BBBB ドイツ 200 200 1000
↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓
(1)レポートで
フィールド[分類]:重複非表示 [はい]
フィールド[名前]:重複非表示 [はい]
フィールド[合計]:重複非表示 [はい]
フィールド[総合計]:重複非表示 [はい]にすると下記の様になってしまいしますが、
分類 名前 地名 小計 合計 総合計
--------------------------------------------------
果物 りんご 青森 100 170 1070
千葉 50
山梨 20
バナナ 千葉 450 450
みかん 栃木 300
150
----------------------------------------
ワイン AAAA ドイツ 500 800 1000
イタリア 300
BBBB ドイツ 200 200
↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓
結果的に上記(1)の様にしたいです。名前のフィルドにバナナ、みかんなどの合計はそれぞれ450と450を表示させたいのですが、たれかその方法は教えて頂けないでしょうか。よろしくお願いします。
No.9
- 回答日時:
もう一つ追加です。
コードはDAOを使っているので、コード表で
ツールバーのツールから参照設定を選択し、
Microsoft DAO xx Object Library
の一番高いバージョンにチェックが
入っているか確認してください。
xxはたとえば、3.6のような感じです。
No.8
- 回答日時:
追加です。
質問のクエリの名前をQdata
としています。
必要ならば、<その3>のcmdMkTableのコードの
最初の部分の、
Set db = CurrentDb
Set rs = db.OpenRecordset("Qdata")
Set rst = db.OpenRecordset("TdataIn", dbOpenDynaset)
のところに、Qdata としていますが、これを
実際のクエリの名前に書き換えて確認してみてください。
この場合、クエリは普通の選択クエリとしています。
また、<その1>でのテーブルは新規に作成しておいてください。
このテーブルレコードの並びを確保するためにオートナンバー
のIDを入れています。レコードを削除してオートナンバーを
また1からはじめるためには、レコードをすべて削除後にファイルを
最適化すれば1からはじまります。
なお、テーブルのレコードを削除するのは削除クエリを
作り、それを実行するのが一番手っ取り早いです。
No.7
- 回答日時:
<その3>
<その2>と同じコード表に張り付けてください。
Sub cmdMkTable()
Dim db As Database
Dim rs As Recordset
Dim rst As Recordset
Dim psBunrui As Variant
Dim psNamae As Variant
Dim psChimei As Variant
Dim psShoukei As Variant
Dim psGoukei As Variant
Set db = CurrentDb
Set rs = db.OpenRecordset("Qdata")
Set rst = db.OpenRecordset("TdataIn", dbOpenDynaset)
rs.MoveFirst
Do Until rs.EOF
rst.AddNew
rst!分類 = funcJYUFUKU1(rs!分類)
rst!名前 = funcJYUFUKU2(rs!名前)
rst!地名 = funcJYUFUKU3(rs!地名)
rst!小計 = funcJYUFUKU4(rs!小計)
psBunrui = rst!分類
psNamae = rst!名前
psChimei = rst!地名
psShoukei = rst!小計
rs.MovePrevious
If rs.BOF Then
rs.MoveNext
myGoukei = funcJYUFUKU5(rs!合計)
rs.MovePrevious
Else
'分類が違う場合
If psBunrui <> rs!分類 Then
rs.MoveNext
myGoukei = rs!合計
rs.MovePrevious
'分類が同じ場合
Else
'分類が同じで名前が違う場合
If psNamae <> rs!名前 Then
rs.MoveNext
myGoukei = rs!合計
rs.MovePrevious
'分類が同じで名前が同じ場合
Else
myGoukei = Null
End If
End If
End If
rs.MoveNext
rst!合計 = myGoukei
rst!総合計 = funcJYUFUKU6(rs!総合計)
rst.Update
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
rst.Close: Set rst = Nothing
db.Close: Set db = Nothing
End Sub
<その3>のcmdMkTableを標準モジュールの
イミディエイトウィンドウで実行してもいいですし、
フォームにボタンを貼り付けそのクリック時イベントで
Call cmdMkTable
とすれば、実行されます。
たとえば、以下のような感じ。
Private Sub ボタン0_クリック()
Call cmdMkTable
End Sub
上記のような感じで登録してください。
わからなことがあれば書き込んでください。
No.6
- 回答日時:
<その2>
以下を標準モジュールに張り付けてください。
Dim varItem1 As Variant
Dim varItem2 As Variant
Dim varItem3 As Variant
Dim varItem4 As Variant
Dim varItem5 As Variant
Dim varItem6 As Variant
Dim myGoukei As Variant
Function funcJYUFUKU1(x As Variant)
If x = varItem1 Then
funcJYUFUKU1 = Null
Else
varItem1 = x
funcJYUFUKU1 = x
End If
End Function
Function funcJYUFUKU2(x As Variant)
If x = varItem2 Then
funcJYUFUKU2 = Null
Else
varItem2 = x
funcJYUFUKU2 = x
End If
End Function
Function funcJYUFUKU3(x As Variant)
If x = varItem3 Then
funcJYUFUKU3 = Null
Else
varItem3 = x
funcJYUFUKU3 = x
End If
End Function
Function funcJYUFUKU4(x As Variant)
If x = varItem4 Then
funcJYUFUKU4 = Null
Else
varItem4 = x
funcJYUFUKU4 = x
End If
End Function
Function funcJYUFUKU5(x As Variant)
If x = varItem5 Then
funcJYUFUKU5 = Null
Else
varItem5 = x
funcJYUFUKU5 = x
End If
End Function
Function funcJYUFUKU6(x As Variant)
If x = varItem6 Then
funcJYUFUKU6 = Null
Else
varItem6 = x
funcJYUFUKU6 = x
End If
End Function
No.5
- 回答日時:
<その1>
なんとかレポートのレコードソースにできるものが
できました。実は勘違いと言うのは計算上は合計の
フィールドに数値を入れるかあるいはNullにするかは
32通りの場合分けが生じます。このことについて
すっかり忘れていたので、最初に提示したコードは
レポートのフィールドに「重複非表示」を設定したの
と同じことになってしまいました。
32通りというのは、対象となるレコードの一つ前の
レコードの、分類、名前、地名、小計、合計の
フィールドとの比較によって生じる場合分けです。
この32通りの場合分けには、実際には質問のクエリ
では起こりえないだろうというものも含まれています。
クエリのデータがどのようなものが存在するのか
その法則が分からない状態、すなわち何でもありの
状態での場合分けです。
実際には、クエリのフィールドにまったく同じデータが
存在したり、あるいは分類が違ってもあとはまったく
同じデータが存在する、といったことは無いのかもしれ
ませんが、これらのことを考えて少しこちらで推測で
場合分けを極小さくしてみました。
こちらで考えた場合分けには、小計のことについては
まったく考慮していません。小計は「重複非表示」の
設定と同じにしています。
場合分けはコードの中にコメントの形で書いています。
[仕様]について
質問のクエリをもとに、テーブルにデータを出します。
テーブルは、
テーブル名 TdataIn
ID(オートナンバー。主キーである必要はありません)
分類、名前、地名、小計、合計、総合計、の各フィールド
を作り、これらのフィールドのデータ型はテキスト型
としてください。
コードは#1で提示したコードも使いますが、分かりやすく
するためにもう一度同じものも掲示します。一部加えたものが
あります。
No.4
- 回答日時:
参考になれば、
単なる合計450でなく、バナナの合計450、みかんの合計450、で判断してこそ重複非表示が活きてきます。名前と合計の連結した値で判断できれば、みかん450を表示できる判断材料になるのではないかと思います。判断はみかん450で印字は450みたいに。「〃」を印字させる手段にヒントがありそうです。
ほかには
クエリで同一グループ毎に連番付与し、1のとき、印字すべきタイミングのレコードか、判断し印字させるというのが考えられます。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_03.png?e8efa67)
No.3
- 回答日時:
レイアウトが多少変わりますが、グループフッターで小計を印刷するのでは拙いでしょうか?
分類 名前 地名 小計 合計 総合計
--------------------------------------------------
果物 りんご 青森 100
千葉 50
山梨 20
170
バナナ 千葉 450
450
みかん 栃木 300
150
450
1070
----------------------------------------
No.1
- 回答日時:
解決したでしょうか。
このような場合、レポートのテキストボックスの
「重複データ非表示」では列すべてが対象となるので
クエリでデータを整えて、それをレポートの
レコードソースにするのがいいのではと、思います。
そのためには、一工夫、あるいは二工夫必要です。
なお、レポートの「重複データ非表示」は「いいえ」
にしておきます。
クエリをQdataとします。SQL文は以下です。
質問の通りのデータの並びの順番は通し番号が
必要なので、一応ID(オートナンバー)を入れています。
このIDをを除けると並びは変わりますが、データは
希望通りになっていると思います。
SELECT Qdata.ID, Qdata.分類, Qdata.名前, Qdata.地名, Qdata.小計, Qdata.合計, Qdata.総
合計, funcJYUFUKU1([分類]) AS 分類表示, funcJYUFUKU2([名前]) AS 名前表示,
funcJYUFUKU3([地名]) AS 地名表示, funcJYUFUKU4([小計]) AS 小計表示, funcJYUFUKU5([合計
]) AS 合計表示, funcJYUFUKU6([総合計]) AS 総合計表示
FROM Qdata
GROUP BY Qdata.ID, Qdata.分類, Qdata.名前, Qdata.地名, Qdata.小計, Qdata.合計, Qdata.
総合計;
上記のSQL文を新規クエリのSQLビューに貼り付け保存してください。
このクエリの分類表示、名前表示、地名表示、小計表示、合計表示、
総合計表示をレポートのデータとして使います。
次に、以下のコードを標準モジュールに張り付けて、
保存してください。
Dim varItem1 As Variant
Dim varItem2 As Variant
Dim varItem3 As Variant
Dim varItem4 As Variant
Dim varItem5 As Variant
Dim varItem6 As Variant
Function funcJYUFUKU1(x As Variant)
If x = varItem1 Then
funcJYUFUKU1 = Null
Else
varItem1 = x
funcJYUFUKU1 = x
End If
End Function
Function funcJYUFUKU2(x As Variant)
If x = varItem2 Then
funcJYUFUKU2 = Null
Else
varItem2 = x
funcJYUFUKU2 = x
End If
End Function
Function funcJYUFUKU3(x As Variant)
If x = varItem3 Then
funcJYUFUKU3 = Null
Else
varItem3 = x
funcJYUFUKU3 = x
End If
End Function
Function funcJYUFUKU4(x As Variant)
If x = varItem4 Then
funcJYUFUKU4 = Null
Else
varItem4 = x
funcJYUFUKU4 = x
End If
End Function
Function funcJYUFUKU5(x As Variant)
If x = varItem5 Then
funcJYUFUKU5 = Null
Else
varItem5 = x
funcJYUFUKU5 = x
End If
End Function
Function funcJYUFUKU6(x As Variant)
If x = varItem6 Then
funcJYUFUKU6 = Null
Else
varItem6 = x
funcJYUFUKU6 = x
End If
End Function
以上です。何かあれば質問してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで重複データを合算したい(時間) 1 2022/12/08 23:06
- その他(Microsoft Office) ピボットテーブルへの集計フィールド挿入 1 2023/02/26 11:33
- Excel(エクセル) ExcelのVLOOKUP関数 7 2022/08/23 06:46
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- Visual Basic(VBA) VBA 連続する名前ごとに集計 3 2022/05/21 18:24
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
access count数を変数に格納
-
「更新に必要なキー列の情報が...
-
Accessの更新前処理について。D...
-
ACCESSのFindコマンドが遅い
-
access2000でつまづいてます
-
Accessのテーブルのレコ...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
変数が選択リストにありません
-
テーブルの存在チェックについて
-
VBAで複数の数式セルを最終行ま...
-
Accessでテーブルの値をテキス...
-
Oracle 2つのDate型の値の差を...
-
アクセス エラーを数値「0」に...
-
Accessでコードを入れると名前...
-
3つの表を1つに縦に連結する
-
INSERT INTO ステートメントに...
-
エクセルグラフの凡例スペース
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「更新に必要なキー列の情報が...
-
Accessの更新前処理について。D...
-
access2000でつまづいてます
-
access count数を変数に格納
-
ACCESSのFindコマンドが遅い
-
半角スペースの置換でエラーを...
-
Access VBAで自動連番を振るには
-
初心者です。Access レポートで...
-
VBScript+SQLServerでcountがう...
-
Access2003でのテーブルの有無確認
-
ECサイトの購入後の在庫処理
-
VB2010のSQLを使ったレコードカ...
-
Accessのテーブルのレコ...
-
cobolのカーソルについて
-
Access VBA
-
[Access]削除時のエラーメッセ...
-
ADOでループすると1レコードず...
-
Set rst = db.OpenRecordset("S...
-
AccessVBAについて
-
ACCESS、EXCELの限界?
おすすめ情報