Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
クロス集計で計算する場合「-」の数値は表示されないです
投稿日時: 19/04/23 17:28:26
投稿者: miyama2305

工事台帳UFのtextbox1に原価コードを入力したらクロス集計で集計表示しますが
金額が「−」の場合は空欄になります。ご指導お願いします。
 
T工事仕訳伝票明細テーブルの内容です
日付/伝票番号/原価コード/金額/摘要
2018/1/4/--1/5412/250/摘要
2018/1/4/--3/5431/-5000/摘要
2018/1/4/--6/5433/500/摘要
2018/1/4/--10/5441/-250/摘要
以降続く
 
TRANSFORM Max(T工事仕訳伝票明細.金額) AS 金額の合計
SELECT T工事仕訳伝票明細.日付, T工事仕訳伝票明細.伝票番号, T工事仕訳伝票明細.原価コード, T工事仕訳伝票明細.金額, T工事仕訳伝票明細.摘要
FROM T工事仕訳伝票明細
WHERE (((T工事仕訳伝票明細.原価コード)=[forms]![工事台帳UF]![textbox1]))
GROUP BY T工事仕訳伝票明細.日付, T工事仕訳伝票明細.伝票番号, T工事仕訳伝票明細.原価コード, T工事仕訳伝票明細.金額, T工事仕訳伝票明細.摘要
PIVOT T工事仕訳伝票明細.原価コード In ("5412","5431","5433","5434","5435","5441","5453","5455","5456","5458","5459","5461","5467");
 

回答
投稿日時: 19/04/23 18:14:36
投稿者: sk

引用:
工事台帳UFのtextbox1に原価コードを入力したらクロス集計で集計表示しますが

[textbox1]に入力した値を具体的に明記されることをお奨めします。
(例えば "5431" など)
 
引用:
金額が「−」の場合は空欄になります。

(フィールド[金額]のデータ型が数値型であるとして)
[金額]の値が 0 未満(負の数)である、という意味でしょうか。
 
引用:
TRANSFORM Max(T工事仕訳伝票明細.金額) AS 金額の合計
SELECT T工事仕訳伝票明細.日付, T工事仕訳伝票明細.伝票番号, T工事仕訳伝票明細.原価コード, T工事仕訳伝票明細.金額, T工事仕訳伝票明細.摘要
FROM T工事仕訳伝票明細
WHERE (((T工事仕訳伝票明細.原価コード)=[forms]![工事台帳UF]![textbox1]))
GROUP BY T工事仕訳伝票明細.日付, T工事仕訳伝票明細.伝票番号, T工事仕訳伝票明細.原価コード, T工事仕訳伝票明細.金額, T工事仕訳伝票明細.摘要
PIVOT T工事仕訳伝票明細.原価コード In ("5412","5431","5433","5434","5435","5441","5453","5455","5456","5458","5459","5461","5467");

[金額]をグループ化の対象に含めてしまっては
クロス集計の意味がないのではないでしょうか。
 
また、[原価コード]を列見出しとして指定しておきながら
同時に行見出しとしても指定しているのも問題です。
 
仮にそれらの指定の誤りを正したとしても、例えば
[textbox1]に入力された値が "5412" であるならば
フィールド[原価コード]の値が "5412" であるレコードのみが
クロス集計の対象になるわけですから、[5412]以外の集計列は
全て空欄になります。

投稿日時: 19/04/23 18:43:14
投稿者: miyama2305

sk様 ありがとうございます
>[textbox1]に入力した値を具体的に明記されることをお奨めします。
>(例えば "5431" など)
5412は材料費
5431は労務費
5433は外注費
等です
 
>フィールド[金額]のデータ型が数値型であるとして)
>[金額]の値が 0 未満(負の数)である、という意味でしょうか。
はいそうです
取引によっては負の数値が表示され、合計計算で「−」されます
 
>[金額]をグループ化の対象に含めてしまっては
>クロス集計の意味がないのではないでしょうか。
TRANSFORM Max(T工事仕訳伝票明細.金額) AS 金額の合計
この部分だと思いますが、表示された金額が正しかったもので
そのまま記載していました。
勉強します
  
>また、[原価コード]を列見出しとして指定しておきながら
>同時に行見出しとしても指定しているのも問題です。
間違いでした。すいません
 
>全て空欄になります。
1取引の原価コードは
"5412","5431","5433","5434","5435","5441","5453","5455","5456","5458","5459","5461","5467"
のうちの1つでOKです。
 

回答
投稿日時: 19/04/24 09:30:05
投稿者: sk

引用:
取引によっては負の数値が表示され、合計計算で「−」されます

引用:
TRANSFORM Max(T工事仕訳伝票明細.金額) AS 金額の合計

[金額]の合計を求めたいのか、[金額]の最大値を求めたいのか、
どちらなのでしょうか。
 
引用:
1取引の原価コードは
"5412","5431","5433","5434","5435","5441","5453","5455","5456","5458","5459","5461","5467"
のうちの1つでOKです。

それだと別にクロス集計クエリでなくとも、
ただの集計クエリでよさそうな気がしますが。
 
( SQL ビュー)
--------------------------------------------------------------
SELECT [T工事仕訳伝票明細].[日付],
       [T工事仕訳伝票明細].[伝票番号],
       [T工事仕訳伝票明細].[原価コード],
       [T工事仕訳伝票明細].[摘要],
       Sum([T工事仕訳伝票明細].[金額]) AS [金額の合計]
FROM [T工事仕訳伝票明細]
WHERE [T工事仕訳伝票明細].[原価コード] = [Forms]![工事台帳UF]![textbox1]
GROUP BY [T工事仕訳伝票明細].[日付],
         [T工事仕訳伝票明細].[伝票番号],
         [T工事仕訳伝票明細].[原価コード],
         [T工事仕訳伝票明細].[摘要];
--------------------------------------------------------------
 
つまり上記の集計クエリのような結果を得られれば
事足りるのではないか、ということ。

投稿日時: 19/04/27 09:41:37
投稿者: miyama2305

sk様 遅くないました。申し訳ありません
 
指導いただいたコード、
時間ください。
改めます。
 
ありがとうございます。