
No.1ベストアンサー
- 回答日時:
回答がないようですが、解決されましたでしょうか。
このクエリはどこに使うのでしょうか。
ただ単にクエリを表示するだけであれば、表示後、列を移動して保存すれば以降その状態で見ることができるようです。
但し、このクエリを使ってExcelにエクスポートしたりするのなら、列の並びが元の状態になるようです。
> クエリプロパティで設定すればいいのですが
「クエリ列見出し」での設定と思います。
ここで設定した並び順で、列が表示されるようです。
(Excelへのエクスポートでも有効みたい)
(クエリをSQLビューで見た時、PIVOT xxx In (yyyy) の yyyy 部分になります)
そこで、抽出期間を指定してクエリを作り直すVBA処理を作りこみます。
確認用環境)
テーブル「T9」
以下サンプル (an はオートナンバ)
an 場所 日付 数量
1 AAA 2009/04/01 94
2 AAA 2009/03/01 93
3 BBB 2009/04/01 94
4 BBB 2009/03/01 93
5 AAA 2010/03/01 103
6 AAA 2010/04/01 104
クエリ「Q9」
TRANSFORM Sum(T9.数量) AS 数量の合計
SELECT T9.場所
FROM T9
GROUP BY T9.場所
PIVOT Year(DateAdd("m",-3,T9.日付)) & IIf(Month(DateAdd("m",-3,T9.日付))<=6,"上期","下期");
クエリの表示結果
場所 2008下期 2009下期 2009上期 2010上期
AAA 93 103 94 104
BBB 93 (空白) 94 (空白)
やりたいクエリは、
TRANSFORM Sum(T9.数量) AS 数量の合計
SELECT T9.場所
FROM T9
GROUP BY T9.場所
PIVOT Year(DateAdd("m",-3,T9.日付)) & IIf(Month(DateAdd("m",-3,T9.日付))<=6,"上期","下期") In ('2010上期','2009下期','2009上期','2008下期');
の結果は、
場所 2010上期 2009下期 2009上期 2008下期
AAA 104 103 94 93
BBB (空白) (空白) 94 93
クエリ「Q9」との違いは、PIVOT の最後に、In (yyyy) があることだけ。
年と上期/下期を指定して作りこもうとしていますが、どうせならクエリの抽出条件に日付の範囲を指定できるようにしておきます。
基本的なクエリ「Q9_B」を作成しておいて、そのクエリの内容を書き換えたものを「Q9」に設定し直す方法としてみます。
「Q9_B」の内容は置き換えが楽なように作っておきます。
(クエリ「Q9」は存在する前提とします)
基本クエリ「Q9_B」の内容
TRANSFORM Sum(T9.数量) AS 数量の合計
SELECT T9.場所
FROM T9
WHERE T9.日付 BETWEEN #XXXX# AND #YYYY#
GROUP BY T9.場所
PIVOT Year(DateAdd("m",-3,T9.日付)) & IIf(Month(DateAdd("m",-3,T9.日付))<=6,"上期","下期") In (ZZZZ);
ここでの、XXXX/YYYY/ZZZZ を条件に合わせて書き換えたものを「Q9」に設定します。
設定用関数例)
Private Sub MakeBetweenQuery_Q9(dt_s As Date, dt_e As Date)
Dim wdt As Date
Dim sTmp As String
Dim sTmp2 As String
Dim sSql As String
wdt = dt_s
sTmp = ""
While (wdt <= dt_e)
If (Month(DateAdd("m", -3, wdt)) <= 6) Then
sTmp2 = "上期"
Else
sTmp2 = "下期"
End If
sTmp = ",'" & Year(DateAdd("m", -3, wdt)) & sTmp2 & "'" & sTmp
wdt = DateAdd("m", 6, wdt)
Wend
If (Month(DateAdd("m", -3, dt_e)) <= 6) Then
If (sTmp2 = "下期") Then
sTmp2 = "上期"
Else
sTmp2 = ""
End If
Else
If (sTmp2 = "上期") Then
sTmp2 = "下期"
Else
sTmp2 = ""
End If
End If
If (Len(sTmp2) > 0) Then
sTmp = ",'" & Year(DateAdd("m", -3, dt_e)) & sTmp2 & "'" & sTmp
End If
sSql = CurrentDb.QueryDefs("Q9_B").SQL
sSql = Replace(sSql, "XXXX", Format(dt_s, "yyyy/mm/dd"))
sSql = Replace(sSql, "YYYY", Format(dt_e, "yyyy/mm/dd"))
sSql = Replace(sSql, "ZZZZ", Mid(sTmp, 2))
CurrentDb.QueryDefs("Q9").SQL = sSql
End Sub
使用例)
抽出期間(日付)を指定する場合、
Private Sub Sample1()
Call MakeBetweenQuery_Q9(#10/1/2008#, #3/31/2010#)
End Sub
これを実行すると、クエリ「Q9」は以下の内容となります。
TRANSFORM Sum(T9.数量) AS 数量の合計
SELECT T9.場所
FROM T9
WHERE T9.日付 BETWEEN #2008/10/01# AND #2010/03/31#
GROUP BY T9.場所
PIVOT Year(DateAdd("m",-3,T9.日付)) & IIf(Month(DateAdd("m",-3,T9.日付))<=6,"上期","下期") In ('2009下期','2009上期','2008下期');
テーブル「T9」全てを対象とする場合、
Private Sub Sample2()
Call MakeBetweenQuery_Q9(DMin("日付", "T9"), DMax("日付", "T9"))
End Sub
これを実行すると、クエリ「Q9」は以下の内容となります。
TRANSFORM Sum(T9.数量) AS 数量の合計
SELECT T9.場所
FROM T9
WHERE T9.日付 BETWEEN #2009/03/01# AND #2010/04/01#
GROUP BY T9.場所
PIVOT Year(DateAdd("m",-3,T9.日付)) & IIf(Month(DateAdd("m",-3,T9.日付))<=6,"上期","下期") In ('2010上期','2009下期','2009上期','2008下期');
※ 関数名は適宜変更してください
※ 細かいところまで確認していませんので、おかしなところがあればドンドン修正してください。
※ こういうことでなかったら、スルーしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【初月無料キャンペーン実施中】オンライン健康相談gooドクター
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
ACCESS 集計クエリの列見出し名を変更したい
Access(アクセス)
-
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
クロス集計の日付表示について
Access(アクセス)
-
4
access・カウント結果がゼロでも、「0」を表示させるには?
その他(データベース)
-
5
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
6
ACCESSのクエリーからEXCELにエクスポート時のエラー
Excel(エクセル)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
アクセスVBAのMe!と[ ]
Access(アクセス)
-
9
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
10
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
-
11
Access クエリで、レコードの無い日付も出力したい
Access(アクセス)
-
12
Access サブフォームでの選択行の取得
その他(データベース)
-
13
ACCESS クロス集計クエリの抽出条件について
Access(アクセス)
-
14
Accessのレポート機能でソート&抽出条件を指定したい
Access(アクセス)
-
15
アクセスで『0の値以外』を表示する方法
Access(アクセス)
-
16
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
17
アクセス IIfとSum関数を同時に使いたい場合
Access(アクセス)
-
18
アクセス2010 クロス集計クエリの列見出し
その他(データベース)
-
19
アクセスのレポート合成(複数のレポートを一つにまとめる方法)
その他(データベース)
-
20
Access クロス集計クエリについて
その他(データベース)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
アクセスで月単位の抽出
-
5
BCPでCSV内の文字列をテーブル...
-
6
Excel→Accessへの日付データの...
-
7
エクセル-過去6カ月分の合計を...
-
8
Accessの日付時刻型から日付、...
-
9
アクセス:既定値に土日含まず...
-
10
【エクセル】指定した日付に一...
-
11
VBA 別シートの同じ日付の欄に...
-
12
access 横型カレンダーを使用し...
-
13
エクセルで書式設定ではなく、...
-
14
ACCESSの空白をカウントする
-
15
【ピボットテーブル】4月から翌...
-
16
アクセス97のVBAで日付項目をヌ...
-
17
指定日付を起点にして最新日付...
-
18
SQLサーバにある日付型のデータ...
-
19
Access クエリで、レコードの無...
-
20
Microsoft Query の抽出条件に...
おすすめ情報
公式facebook
公式twitter