dポイントプレゼントキャンペーン実施中!

Accessで伝票を作成したいのですが、データが縦にしかできません。
なにか方法はありますか?

現状
商品名 サイズ 数量
靴①   250  1
靴①   255  2
靴②   235  2
靴③   260  4
靴③   265  3
-----------------------------------------------
希望
商品名 サイズ 
     数量
    250 255
靴①   1  2
    235
靴②   2
    260 265 
靴③   4  3

上記のように商品ごとに横な並べて印刷したいです。
クロス集計クエリ使うとすべてのサイズが表示されてしまします。
Accessではこのようにできないのでしょうか?

助けてください。

A 回答 (7件)

無理やりやるとすると、以下のような感じでしょうか・・・。


テーブル名が「テーブル1」であるとします。
また、同じ商品名で同じサイズのデータは存在しないとします。

クロス集計の前に1つクエリを作成します。(クエリ名が「クエリ1」であるとします。)
商品名、サイズ、数量の他に、以下のフィールドを追加します。
番号:DCount("*","テーブル1","[サイズ] <='" & [テーブル1]![サイズ] & "' And [商品名]='" & [テーブル1]![商品名] & "'")
同じ商品名の中での連番になります。

次に、この「クエリ1」を元にしてクロス集計クエリを作成します。
行見出しを商品名、列見出しを番号、値を数量の合計とします。
こうすると、行見出しが商品名で、列見出しが1からの連番のクエリが出来ます。

クロス集計クエリを元にしてレポートを作成します。
詳細部に、商品名、1、2・・・のテキストボックスを配置します。
次に、1、2・・・のテキストボックスの上に、サイズを表示するためのテキストボックスを作ります。
そのコントロースソースに以下のように記入します。
=DLookUp("サイズ","クエリ1","商品名='" & [商品名] & "' AND 番号=1")
2以降は番号の条件を変えてください。
これで、サイズが表示されるようになります。

ただし、サイズの個数が変わるとクロス集計クエリの列数が変わってしまうので、そのあたりの工夫が必要になります。
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。
クエリ1について質問ですが。
商品には発注番号が存在します。
1つの発注番号に重複した明細(商品名、サイズ名)は存在しません。
が、発注番号が違えば同じ明細も存在します。
その場合連番を付けることは不可能ですか?
発注番号ごとにテーブル→クエリ→クロス集計→レポート
のほうがいいですかね、、、

お礼日時:2021/05/12 10:13

> 上記のようになってしまいます。


> 同じ商品でも番号が違うため複数行になります。

んんん~?
クロス集計クエリに「サイズ」入れちゃってませんか?
    • good
    • 0
この回答へのお礼

並べ替えの為にJANコードを含めていました。
行列の入れ替えをなしにしていましたので問題ないと思っていたのですが、
Accessって難しいですね
この度はお助けいただき誠にありがとうございました。
無事望み通りの仕様になりました。

お礼日時:2021/05/14 15:27

> クエリ1のクロス集計にはサイズの項目が存在していませんでした。


> 列、行、値どこに追加したらいいのですか?
>
> レポートはクロス集計を基にしてますので、
> サイズも同じクエリから参照しているのですよね?

「クエリ1」はクロス集計クエリ(レポートの基になってるクエリ)じゃなく、その1段階前のクエリです。
よって、
=DLookUp("サイズ","クエリ1","商品名='" & [商品名] & "' AND 発注番号=" & [発注番号] & " AND 番号=1")
の「クエリ1」は、クロス集計クエリのことではないです。

クロス集計クエリに「サイズ」を入れてしまうとおかしくなるので、そこには入ってなくてOKです。
    • good
    • 0
この回答へのお礼

ご指摘の通り致しましたらサイズ標記が出ました!!!
ただすべて1行になるのですが何かおかしいですか?
例)
靴①  250  
     1
靴①     260  
        2 
靴②  230
     2
靴②     235
        4 

上記のようになってしまいます。
同じ商品でも番号が違うため複数行になります。
こればかりは仕方ないのでしょうか。

何度も質問すいません
rabbit_9999様のおかげで完成に近づいています。
ありがとうございます!

お礼日時:2021/05/14 15:05

> クエリ名や項目名は確かに別の名前で作っていますが


> それに合わせて構成分も変換はしています。
> 番号の時はうまくいったのですが、、、

うーん、なんだろう・・・。
ごめんなさい、ちょっと原因が分からないです。
(試しに自分のところでやってみた限りでは、これで出来ました。)
基本的には、そのエラーは「そんな名前のものは無い!」という意味なので、名称関係の問題だとは思うのですが。
    • good
    • 1
この回答へのお礼

お疲れ様です!

原因が分かったかもしれません。
クエリ1のクロス集計にはサイズの項目が存在していませんでした。
列、行、値どこに追加したらいいのですか?

レポートはクロス集計を基にしてますので、
サイズも同じクエリから参照しているのですよね?

すいませんが、よろしくお願いいたします。

お礼日時:2021/05/14 10:21

> #Name?のエラーになってしまします。



クエリ名とか項目名は大丈夫でしょうか?
「クエリ1」じゃなく、別の名前で作ってるとか・・・。

あとは、私の例では発注番号は文字列(テキスト)にしちゃってますが、実際には数値でしょうか?
そうであれば、

=DLookUp("サイズ","クエリ1","商品名='" & [商品名] & "' AND 発注番号=" & [発注番号] & " AND 番号=1")

のように、発注番号のところの「'」を削除してみてください。
ただ、その場合はクエリの番号のところも同じようにする必要があるので、違うかな・・・。
    • good
    • 0
この回答へのお礼

クエリ名や項目名は確かに別の名前で作っていますが
それに合わせて構成分も変換はしています。
番号の時はうまくいったのですが、、、
もう一度挑戦します!!

お礼日時:2021/05/13 14:22

> レポートのサイズを表示させるテキストボックスの


> 関数はどのように変化しますか?

=DLookUp("サイズ","クエリ1","商品名='" & [商品名] & "' AND 発注番号='" & [発注番号] & "' AND 番号=1")

上記のように発注番号の条件を追加すれば、いけると思います。
    • good
    • 0
この回答へのお礼

#Name?のエラーになってしまします。
コピペしているのですが、、、
何が原因として考えられますか??

何度も質問申し訳ございません。
力をお貸しください。

お礼日時:2021/05/13 12:51

> 商品には発注番号が存在します。


> 1つの発注番号に重複した明細(商品名、サイズ名)は存在しません。
> が、発注番号が違えば同じ明細も存在します。
> その場合連番を付けることは不可能ですか?

商品名 サイズ 数量 発注番号
靴①   250  1  A1001 ←発注番号違いで同じ商品&サイズのデータがある
靴①   255  2  A1001
靴①   250  8  A1002 ←発注番号違いで同じ商品&サイズのデータがある

この状態から、

----------------------------------------------
出力例(1)
商品名 サイズ 
     数量
    250 255
靴①   9  2
----------------------------------------------

----------------------------------------------
出力例(2)
商品名 発注番号 サイズ 
          数量
         250 255
靴①  A1001   1  2
         250
靴①  A1002   8
----------------------------------------------

----------------------------------------------
出力例(3)
商品名 発注番号・サイズ 
     数量
    A1001&250 A1001&255 A1002&250
靴①   1      2      8
----------------------------------------------

このどれにしたいのかによるのではないでしょうか。

(1)であれば、「クエリ1」の前にもう1つ「クエリ0」を作って、商品名、サイズでグループ化、数量は合計にする。
「クエリ0」を元に「クエリ1」を作って、以降で「テーブル1」となっている部分を「クエリ0」にする。

(2)であれば、「クエリ1」に発注番号も出す。
番号は以下のようにする。
番号: DCount("*","テーブル1","[サイズ] <='" & [テーブル1]![サイズ] & "' And [商品名]='" & [テーブル1]![商品名] & "' And [発注番号]='" & [テーブル1]![発注番号] & "'")
クロス集計クエリに発注番号を列見出しで追加する。

(3)であれば、「クエリ1」の前にもう1つ「クエリ0」を作って、全ての項目を追加し、さらに以下の項目を追加する。
表示名: [発注番号] & "&" & [サイズ]
「クエリ0」を元に「クエリ1」を作って、番号は以下のようにする。
番号: DCount("*","クエリ0","[表示名] <='" & [クエリ0]![表示名] & "' And [商品名]='" & [クエリ0]![商品名] & "'")

・・・という感じで出来るのではないかと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まさに出力例(2)のようにいしたいと考えています。
発注番号べつに連番を付けることができました。
レポートのサイズを表示させるテキストボックスの
関数はどのように変化しますか?

お礼日時:2021/05/13 11:49

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

このQ&Aを見た人はこんなQ&Aも見ています