![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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も見ています
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。特にものすごく怒られたときとか、とんでもない損害を与えてしまったときとか…。
-
ACCESS 集計クエリの列見出し名を変更したい
Access(アクセス)
-
Accessのクロス集計→テーブル作成で値がない場合の対処法
Access(アクセス)
-
アクセス クロス集計クエリ→テーブル作成クエリ
その他(Microsoft Office)
-
-
4
複数列フィールド値のクロス集計
Access(アクセス)
-
5
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
6
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
7
Accessフォームにクロス集計クエリを表示させるとき
Access(アクセス)
-
8
Access ¥マークを表示しない
Excel(エクセル)
-
9
アクセス2010 クロス集計クエリの列見出し
その他(データベース)
-
10
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
11
accessテーブル作成クエリを実行したときにオートNo(のような)振る方法
その他(データベース)
-
12
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
13
アクセスで『0の値以外』を表示する方法
Access(アクセス)
-
14
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
15
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
-
16
Accessのクエリでデータの入力ができません
Access(アクセス)
-
17
ACCESSのテーブル複数行を1行にしてエクスポートは?
Access(アクセス)
-
18
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
19
DCOUNT関数がなぜかカウントしない
Excel(エクセル)
-
20
VBAをつかってクエリの情報を抽出するには??
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQL文で パラメータが少なすぎ...
-
日付型のフィールドに空白を入...
-
sql update で 抽出条件データ...
-
Accessで日付の比較がうまくい...
-
式を簡単にしてください。ACCES...
-
アクセスで月単位の抽出
-
【エクセル】指定した日付に一...
-
Accessのクエリ / 曜日の表示...
-
アクセス:既定値に土日含まず...
-
BCPでCSV内の文字列をテーブル...
-
Excleピボットでデータのない部...
-
SQLサーバにある日付型のデータ...
-
アクセス97のVBAで日付項目をヌ...
-
アクセスのフォームで期間検索...
-
SQL 前日分と相違があればアラ...
-
Accessの日付時刻型から日付、...
-
今週分だけ表示させたい
-
差込印刷での全角表示について...
-
アクセスで追加した項目に全て...
-
Access フォームからの入力結...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
Excel→Accessへの日付データの...
-
Accessの日付時刻型から日付、...
-
BCPでCSV内の文字列をテーブル...
-
アクセスで月単位の抽出
-
Access クエリで、レコードの無...
-
エクセル-過去6カ月分の合計を...
-
アクセス:既定値に土日含まず...
-
ACCESSの空白をカウントする
-
アクセス97のVBAで日付項目をヌ...
-
Accessで日付の比較がうまくい...
-
指定日付を起点にして最新日付...
-
クロス集計のユニオンクエリー...
-
【エクセル】指定した日付に一...
-
Accessのデータ型の日付/時刻型...
-
前のレコードの合計に現レコー...
-
【Accessで困っています...
おすすめ情報