Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


765 / 2272 ツリー ←次へ | 前へ→

【10200】テーブルを変換するには にしもり 08/2/1(金) 16:14 質問[未読]
【10201】Re:テーブルを変換するには VBWASURETA 08/2/4(月) 9:19 発言[未読]
【10202】Re:テーブルを変換するには にしもり 08/2/4(月) 9:50 質問[未読]
【10204】Re:テーブルを変換するには hatena 08/2/4(月) 13:34 回答[未読]
【10207】Re:テーブルを変換するには にしもり 08/2/4(月) 15:15 質問[未読]
【10212】Re:テーブルを変換するには hatena 08/2/7(木) 11:11 回答[未読]
【10216】Re:テーブルを変換するには にしもり 08/2/7(木) 14:42 質問[未読]
【10236】Re:テーブルを変換するには にしもり 08/2/12(火) 9:48 お礼[未読]
【10239】Re:テーブルを変換するには にしもり 08/2/12(火) 11:13 質問[未読]
【10244】Re:テーブルを変換するには hatena 08/2/14(木) 12:53 回答[未読]
【10245】Re:テーブルを変換するには にしもり 08/2/15(金) 10:53 お礼[未読]

【10200】テーブルを変換するには
質問  にしもり  - 08/2/1(金) 16:14 -

引用なし
パスワード
   こんにちは。

店コード、店名、計上日、品名というフィールドのテーブルがあります。


210021、東京店、2007/11/13,Apple
210021、東京店、2007/11/13,Banana
210021、東京店、2007/11/13,Orange
210021、東京店、2007/11/26,Apple
210021、東京店、2007/11/26,Banana


これを下記のようなテーブルに変換したいとき どのようなクエリを組めばいいかわかりません。
店コード、店名、計上日、品名1、品名2、品名3・・・品名n
210021、東京店、2007/11/13,Apple,Banana,Orange
210021、東京店、2007/11/26,Apple,Banana

なおn=20程度です。

どなたかご教示くださいませんか。

【10201】Re:テーブルを変換するには
発言  VBWASURETA  - 08/2/4(月) 9:19 -

引用なし
パスワード
   ▼にしもり さん:

おはようございます。

多分ですが、クロスクエリーで可能と思われます。
ウィザード使って確認してみると良いかも知れません。

【10202】Re:テーブルを変換するには
質問  にしもり  - 08/2/4(月) 9:50 -

引用なし
パスワード
   ▼VBWASURETA さん:

>多分ですが、クロスクエリーで可能と思われます。
>ウィザード使って確認してみると良いかも知れません。

おはようございます。
クロス集計ですと、品目のフィールドがCount可能な値になってないといけないので、難しいと感じています。
ウィザードで確認してみます。

【10204】Re:テーブルを変換するには
回答  hatena  - 08/2/4(月) 13:34 -

引用なし
パスワード
   まず前準備として、

210021、東京店、2007/11/13,Apple、 1
210021、東京店、2007/11/13,Banana、2
210021、東京店、2007/11/13,Orange、3
210021、東京店、2007/11/26,Apple、 1
210021、東京店、2007/11/26,Banana、2

というようにグループ内で連番を振ります。
これができれば、後はクロス集計クエリで、

行見出し 店コード、店名、計上日
列見出し 連番
値    品名(先頭)

でよろしいかと。

連番を振る方法はクエリなどいろいろ方法がありますので、
WEB等で検索してみてください。

目的がレポート出力なら、レポート上でVBAを利用した方が
シンプルかつ高速にできます。

【10207】Re:テーブルを変換するには
質問  にしもり  - 08/2/4(月) 15:15 -

引用なし
パスワード
   ▼hatena さん:
ありがとうございます。
アドバイスにしたがいグループごとに連番を振る方法をWebを調べたら 標準プロシージャ IntGpを作成せよ とありました。
↓↓↓↓↓

Option Compare Database
Option Explicit

Dim Int対比 As Integer
Dim Int連番 As Integer

Function IntGp(Var基準値 As Variant) As Integer

  If Not IsNull(Var基準値) Then
  
    If Int対比 <> Var基準値 Then Int連番 = 0

    Int連番 = Int連番 + 1
    IntGp = Int連番
    Int対比 = Var基準値
  
  Else
  
    MsgBox "基準値に空白がありますので作業を停止します。"
    End
    
  End If
  
End Function

しかし、できてません。
グループは東京店11/13でAグループ、東京店11/26でBグループというふうに 東京店でひとつのグループというわけではありません。
上記方法ですと、A、Bグループ各々にVar基準値が要るようです。

例:
210021、東京店、2007/11/13,Apple
210021、東京店、2007/11/13,Banana
210021、東京店、2007/11/13,Orange
210021、東京店、2007/11/26,Apple
210021、東京店、2007/11/26,Banana
210022、大阪店、2007/11/13,Apple
210022、大阪店、2007/11/13,Banana

の場合まず001、002といったグループ番号を付与しなければいけないようです。それが難しいです。

001、210021、東京店、2007/11/13,Apple
001、210021、東京店、2007/11/13,Banana
001、210021、東京店、2007/11/13,Orange
002、210021、東京店、2007/11/26,Apple
002、210021、東京店、2007/11/26,Banana
003、210022、大阪店、2007/11/13,Apple
003、210022、大阪店、2007/11/13,Banana

また、(説明不足だったのですが)店コードはデータ型で、数値にしようと思ったのですが変換するとレコードがいくつかロストしてしまいます。
どうすれば宜しいでしょうか。

【10212】Re:テーブルを変換するには
回答  hatena  - 08/2/7(木) 11:11 -

引用なし
パスワード
   クエリを作成して、下記のフィールドを追加します。

連番: (SELECT Count(*) From テーブル1 AS T
WHERE T.店コード=テーブル1.店コード AND T.計上日=テーブル1.計上日 AND T.品名<=テーブル1.品名)

これで連番ができるので、これを元にクロス集計クエリを作成します。


上でも言いましたが、もし、レポート出力が最終目的なら、レポート上でVBAで処理した方が
速いので、希望があればそちらの方法も紹介します。。

【10216】Re:テーブルを変換するには
質問  にしもり  - 08/2/7(木) 14:42 -

引用なし
パスワード
   ▼hatena さん:
まことにありがとうございます。
ほぼできました。
ほぼ、というのは、下記のような場合に希望どおりにできません。

例:
店コード    店名    計上日         品名
3500004    名古屋店    2007/11/05    Ringo
3500004    名古屋店    2007/11/01    Ringo
3500004    名古屋店    2007/11/29    Ringo
3500004    名古屋店    2007/11/21    Ringo
3500004    名古屋店    2007/11/16    Ringo
3500004    名古屋店    2007/11/29    Ringo
3500004    名古屋店    2007/11/01    Vanilla
3500004    名古屋店    2007/11/05    Vanilla
3500004    名古屋店    2007/11/16    Vanilla
3500004    名古屋店    2007/11/21    Vanilla
3500004    名古屋店    2007/11/01    Zebra
3500004    名古屋店    2007/11/05    Zebra
3500004    名古屋店    2007/11/21    Zebra
3500004    名古屋店    2007/11/05    Zebra
3500004    名古屋店    2007/11/01    Zebra
3500004    名古屋店    2007/11/29    Zebra
3500004    名古屋店    2007/11/29    Zebra
3500004    名古屋店    2007/11/16    Zebra


教えていただいた通りにやりますと、以下のようになります。

店コード    店名    計上日        1    2    3    4
3500004    名古屋店    2007/11/01    Ringo    Vanilla        Zebra
3500004    名古屋店    2007/11/05    Ringo    Vanilla        Zebra
3500004    名古屋店    2007/11/16    Ringo    Vanilla    Zebra    
3500004    名古屋店    2007/11/21    Ringo    Vanilla    Zebra    
3500004    名古屋店    2007/11/29        Ringo        Zebra

たとえば2007/11/01のVanillaのあとブランクなしにZebraを出したいのに、そうなりません。つまり連番の付与が飛んでしまうのです。
どこかやり方が悪いでしょうか。

【10236】Re:テーブルを変換するには
お礼  にしもり  - 08/2/12(火) 9:48 -

引用なし
パスワード
   ▼hatena さん:
他のPCでやったらできました。
不思議ですが使うPCによって違う結果になります。
有難うございました。
心より感謝いたします。

また、フォームでやる方法を御教えくださるとのことですが、
ご負担でなければ、で結構です。
といいますのは結局Excelにエクスポートするので、いまのところクエリで必要十分だからです。
向学心を発揮しなければいけないところですが、すみません。
今後とも宜しくお願いいたします。

【10239】Re:テーブルを変換するには
質問  にしもり  - 08/2/12(火) 11:13 -

引用なし
パスワード
   くわしくみたらやはり【10216】の現象は直っていませんでした。
研究してみます。
アドバイスございましたら宜しくお願いします。

【10244】Re:テーブルを変換するには
回答  hatena  - 08/2/14(木) 12:53 -

引用なし
パスワード
   >たとえば2007/11/01のVanillaのあとブランクなしにZebraを出したいのに、そうなりません。つまり連番の付与が飛んでしまうのです。

原因は、重複するレコードがあるからです。

>3500004    名古屋店    2007/11/01    Zebra ※1
>3500004    名古屋店    2007/11/05    Zebra
>3500004    名古屋店    2007/11/21    Zebra
>3500004    名古屋店    2007/11/05    Zebra
>3500004    名古屋店    2007/11/01    Zebra ※1
>3500004    名古屋店    2007/11/29    Zebra ※2
>3500004    名古屋店    2007/11/29    Zebra ※2
>3500004    名古屋店    2007/11/16    Zebra

重複レコードはどうしたいのですか。
一つにまとめて表示するのか、
3500004 名古屋店 2007/11/01 Ringo Vanilla Zebra
まとめずにそのまま表示するのか、
3500004 名古屋店 2007/11/01 Ringo Vanilla Zebra Zebra
どちらですか。

【10245】Re:テーブルを変換するには
お礼  にしもり  - 08/2/15(金) 10:53 -

引用なし
パスワード
   ▼hatena さん:
テーブルには重複するレコードはないと思いこんでいました。
この点を看過ごし、何日も悩んでいました。
お恥かしい限りです。
希望は 1つにまとめて表示する、ですが、
テーブルを予め集計でグループ化したら完成しました。

このたびはまことにお手数をかけました。
電気製品がつかずメーカーに電話したらコンセントが抜けていた、ような感じです。
申し訳ございませんでした。
そして本当にありがとうございました。

765 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078201
(SS)C-BOARD v3.8 is Free