Excel SQLでクロス集計がやりたいです。
支店番号 日付 売上
A 2018/4/1 1000
B 2018/5/1 1001
C 2018/5/31 1002
A 2018/6/30 1003
B 2018/7/30 1004
C 2018/8/29 1005
A 2018/9/28 1006
B 2018/4/1 1007
C 2018/5/1 1008
A 2018/5/31 1009
B 2018/6/30 1010
C 2018/7/30 1011
A 2018/8/29 1012
B 2018/9/28 1013
C 2018/4/1 1014
A 2018/5/1 1015
B 2018/5/31 1016
C 2018/6/30 1017
A 2018/7/30 1018
B 2018/8/29 1019
C 2018/9/28 1020
実行結果
支店番号 4 5 6 7 8 9 TOTAL
A 合計 合計
B 合計 合計
C 合計 合計
シートの名前はデータ
strSQL = ""
strSQL = strSQL & " TRANSFORM SUM(売上) AS 売上合計"
strSQL = strSQL & " SELECT 支店番号 , SUM(S.売上) AS 全支店合計"
strSQL = strSQL & " FROM "
strSQL = strSQL & " データ "
strSQL = strSQL & " GROUP BY データ.支店番号 "
strSQL = strSQL & " PIVOT データ.顧客番号; "
うまくいきませんでした。
わかる方お願い致します。
No.1ベストアンサー
- 回答日時:
> strSQL = strSQL & " SELECT 支店番号 , SUM(S.売上) AS 全支店合計"
ここのところの S.売上 は、正しい指定ですか?
また、この指定では 合計 部分は2列目に表示されますが・・・・
その辺は、目をつぶる?
> strSQL = strSQL & " PIVOT データ.顧客番号; "
ここの PIVOT は、項目名になる部分なので、
PIVOT Month(データ.日付)
とかにしないと、月を示す数字にはならないかと・・・
以下、参考程度で
提示あった表は Sheet1 の A1 ~
結果を Sheet2 の A1 ~
自力で行えば、合計部分をどこに・・・自由かと
速度的にも大差はないかと・・・
Option Explicit
Public Sub Samp1()
Dim dic As Object, dicM As Object, dicW As Object
Dim vA As Variant, vK As Variant, v As Variant, vW As Variant
Dim sF As String
Dim i As Long, j As Long, k As Long, m As Long, n As Long
Set dic = CreateObject("Scripting.Dictionary")
Set dicM = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet1")
With .Range("A1", .Cells(Rows.Count, "A").End(xlUp))
vA = .Resize(, 3).Value
End With
End With
For i = 2 To UBound(vA)
If (Not dic.Exists(vA(i, 1))) Then
dic.Add vA(i, 1), CreateObject("Scripting.Dictionary")
End If
Set dicW = dic(vA(i, 1))
m = Month(vA(i, 2))
dicW(m) = dicW(m) + vA(i, 3)
dicM(m) = Empty
Next
k = dic.Count + 2
ReDim vA(1 To k, 1 To dicM.Count + 2)
i = 1: j = 2
vA(i, 1) = "支店番号"
vA(k, 1) = "合計"
For Each v In dicM.Keys
vA(i, j) = v
dicM(v) = j
j = j + 1
Next
vA(i, j) = "合計"
For Each vK In dic.Keys
i = i + 1
vA(i, 1) = vK
Set dicW = dic(vK)
For Each v In dicW.Keys
n = dicM(v)
vW = dicW(v)
vA(i, n) = vW
vA(i, j) = vA(i, j) + vW
vA(k, n) = vA(k, n) + vW
vA(k, j) = vA(k, j) + vW
Next
Next
Application.ScreenUpdating = False
With Worksheets("Sheet2")
With .Range("A1").Resize(k, j)
.CurrentRegion.Clear
.Value = vA
If (j > 3) Then
With .Columns(2).Resize(, j - 2)
.Sort .Cells(1), xlAscending, , Header:=xlNo _
, Orientation:=xlSortRows
End With
End If
With .Resize(k - 1)
.Sort .Cells(1), xlAscending, , Header:=xlYes _
, Orientation:=xlSortColumns
End With
.Rows(1).HorizontalAlignment = xlCenter
.Borders.LineStyle = xlContinuous
End With
End With
Application.ScreenUpdating = True
Set dic = Nothing
Set dicM = Nothing
Set dicW = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) SQLで抽出 4 2022/12/04 13:55
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Excel(エクセル) EXCELピボットテーブル関数について 2 2023/04/10 20:35
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) Excelの数字(文字列)合計について あるデータをダウンロードすると、数字データが全て文字列になっ 4 2022/09/26 21:21
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel 1セル当りの文字数が2...
-
VB.netのTableAdapter.InsertQu...
-
DataGridViewの特定列に入力さ...
-
VBA 最終行のひとつしたの行に...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
char str[256]の256の意味は?
-
htmlソース編集で、各タグを何...
-
UTF-8で5~6バイトになる文字コ...
-
応募フォームなどの住所欄で最...
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
Cのプログラムがどうしても動き...
-
バイナリとBCDコード
-
ピクセル,dpiから容量(バイト...
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
sort関数でひらがなとカタカナ...
-
リトルエンディアンのデータを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 1セル当りの文字数が2...
-
DataGridViewの特定列に入力さ...
-
ListView重複データ削除
-
GUIDの重複
-
光散乱のシミュレーションにつ...
-
Excel VBA チェックツール
-
VBAを使って複数条件からの合計...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
stable diffusionのエラー
-
COBOLのCOMP形式について
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
おすすめ情報
支店番号 4月 5月 6月 7月 8月 9月 TOTAL
A 合計
B合計
C 合計
SQLでやりたいのですが。
このコードわたしにはまだ無理かもしれません。
SQLでなんとか