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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- Excel(エクセル) EXCEL値貼り付け(ある条件のもと自動化) 5 2023/06/06 12:21
- 財務・会計・経理 賞与引当金の計上について計上が必要かどうかまとめてみました(1月決算) 認識違うぞということがあれば 1 2023/07/24 17:17
- 預金・貯金 通帳内の定期預金の記載について 2 2022/03/27 18:00
- 食べ物・食材 この店の名前は知ってる人がいますか? 4/13日は新宿三丁目の地下で見かけましたけど、並ぶ暇がなくて 1 2022/04/27 20:44
- 高校 日商簿記3級の勉強中なのですが 精算表が完成せず困っています。 こちらの問題の回答を教えていただきた 2 2023/03/02 09:07
- Excel(エクセル) エクセルでのINDIRECT関数の使い方について 3 2022/08/22 07:38
- 数学 数学Aの確率と場合の勉強の仕方を教えてください。 高校1年です。明日数Aの期末テストがあります。です 5 2022/07/04 18:03
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ACCESS 集計クエリの列見出し名を変更したい
Access(アクセス)
-
複数列フィールド値のクロス集計
Access(アクセス)
-
クロス集計クエリの結果をテーブルにしたい
Access(アクセス)
-
-
4
アクセス クロス集計クエリ→テーブル作成クエリ
その他(Microsoft Office)
-
5
Accessのクロス集計→テーブル作成で値がない場合の対処法
Access(アクセス)
-
6
Accessフォームにクロス集計クエリを表示させるとき
Access(アクセス)
-
7
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
8
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
9
Access2003 クエリで、空の列は作れますか?
Access(アクセス)
-
10
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
11
アクセス2010 クロス集計クエリの列見出し
その他(データベース)
-
12
クロス集計のユニオンクエリーがうまくできません
その他(データベース)
-
13
Excelのデータ(数字)をテキスト型としてaccessにインポートする方法
Excel(エクセル)
-
14
Access ¥マークを表示しない
Excel(エクセル)
-
15
アクセスのフィールド表示を2段にする方法・抽出の方法
Access(アクセス)
-
16
「#エラー」の回避
Access(アクセス)
-
17
アクセス 項目毎にデータを横に並べる方法
Access(アクセス)
-
18
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
-
19
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
20
選択クエリで空欄のテーブルがあっても表示したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Access クエリで、レコードの無...
-
Excleピボットでデータのない部...
-
BCPでCSV内の文字列をテーブル...
-
日付/時刻型フィールドで時刻デ...
-
Accessでnow()で取り出した日付...
-
アクセスの昇順並び替えで空白...
-
アクセス97のVBAで日付項目をヌ...
-
Access2000 週報のレポート作成
-
Accessの日付時刻型から日付、...
-
前のレコードの合計に現レコー...
-
VBA 別シートの同じ日付の欄に...
-
Accessのデータ型の日付/時刻型...
-
式を簡単にしてください。ACCES...
-
【エクセル】指定した日付に一...
-
Accessで日付の比較がうまくい...
-
アクセスで月単位の抽出
-
質問
-
差込印刷での全角表示について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
Accessの日付時刻型から日付、...
-
BCPでCSV内の文字列をテーブル...
-
アクセスで月単位の抽出
-
Excel→Accessへの日付データの...
-
指定日付を起点にして最新日付...
-
Access クエリで、レコードの無...
-
ACCESSの空白をカウントする
-
【vba】日付の形式が勝手に変わ...
-
【エクセル】指定した日付に一...
-
アクセス:既定値に土日含まず...
-
Accessで日付の比較がうまくい...
-
【Accessで困っています...
-
Accessのデータ型の日付/時刻型...
-
クロス集計のユニオンクエリー...
-
アクセスの昇順並び替えで空白...
-
Accessでnow()で取り出した日付...
おすすめ情報