|
下記のようなDBがあり、それをマクロを使用し
種類と種でフィルタをかけ下記のような結果を各シートごとに保存しています。
Sub 抽結果別シートへ保存()
抽出 "coke", 1, "normal", 2
抽出 "coke", 1, "diet", 2
抽出 "'grape", 1
抽出 "soda", 1
抽出 "orange", 1
End Sub
'分類=分類を文字列で指定。項目=列番号を数字で指定
Private Sub 抽出(ByVal 種類 As String, ByVal 項目 As Integer, _
Optional ByVal 種 As String, Optional ByVal 項目2 As Integer)
Dim Org_Sh As Worksheet '元Sheet
Dim Des_Sh As Worksheet '先Sheet
Dim ErFg As Boolean '引数のエラーフラグ
Dim ShName As String 'Sheetの名前 追加。
'引数のエラー判定
ErFg = False
Select Case True
Case 項目 = 0: ErFg = True
Case 種 <> "" And 項目2 = 0: ErFg = True
Case 種 = "" And 項目2 <> 0: ErFg = True
End Select
If ErFg = True Then
MsgBox "引数が正しくありません" & vbCr _
& 種類 & "," & 項目 & "," & 種 & "," & 項目2
Exit Sub
End If
'元SheetをSet
Set Org_Sh = Worksheets("取込DB")
'先SheetをSet なければ作成。種の引数判定を追加
If 種 <> "" Then
ShName = 種類 & "_" & 種
Else
ShName = 種類
End If
On Error Resume Next
Set Des_Sh = Worksheets(ShName)
On Error GoTo 0
If Des_Sh Is Nothing Then
Set Des_Sh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
Des_Sh.Name = ShName
Else
Des_Sh.Cells.Clear
End If
'AutoFilterでコピー 第2種類がある場合の動作を追加
With Org_Sh.UsedRange
'第2引数がない場合、項目列が違う場合
If 項目 <> 項目2 Then
.AutoFilter Field:=項目, Criteria1:=種類
If 種 <> "" And 項目2 <> 0 Then
.AutoFilter Field:=項目2, Criteria1:=種
End If
End If
'第2引数ありで項目列が同じ場合。Or種類で抽出
If 項目 = 項目2 Then
.AutoFilter Field:=項目, Criteria1:=種類, Operator:=xlOr, Criteria2:=種
End If
.SpecialCells(xlVisible).Copy Des_Sh.Range("A1")
.AutoFilter
End With
DBイメージ↓
種類 種 storecode 8月 9月
-----------------------------------------------------
coke normal 115 16,000 77,000
coke diet A11 20,000 29,800
orange 99 114 18,380 6,900
coke normal 321 19,000 25,000
grape 99 211 25,000 6,970
soda 99 131 25,000 20,100
coke normal B21 39,000 48,900
coke diet B11 58,000 63,000
orange 99 221 15,200 4,880
soda 99 B31 35,000 36,000
grape 99 113 36,400 48,500
coke diet B11 40,000 51,099
soda 99 133 46,000 19,000
soda 99 122 68,000 10,000
coke normal 115 58,000 45,000
[coke_normal]シート
種類 種 storecode 8月 9月
-----------------------------------------------------
coke normal 115 16,000 77,000
coke normal 321 19,000 25,000
coke normal B21 39,000 48,900
coke normal 115 58,000 45,000
[coke_diet]シート
種類 種 storecode 8月 9月
-----------------------------------------------------
coke diet A11 20,000 29,800
coke diet B11 58,000 63,000
coke diet B11 40,000 51,099
[grape]シート
種類 種 storecode 8月 9月
-----------------------------------------------------
grape 99 211 25,000 6,970
grape 99 113 36,400 48,500
今回お伺いしたいのは
さらに各シートの中でstoreコードごとに指定したリストの順通りに並べ集計をしたいのですが、
毎回レコード数も違い、なかなか上手くいきません。
よいお知恵があればお力をお借りしたいと思っています。
よろしくお願いします。
---------↓↓↓↓↓↓↓---------
[coke_normal]シート
storecode store 8月 9月
-----------------------------------------------------
115 大阪 74,000 122000
121 仙台 0 0
321 八日市 19,000 25,000
131 福岡 0 0
132 香港 0 0
133 上海 0 0
211 台湾 0 0
221 関西 0 0
231 長岡 0 0
311 松元 0 0
114 東京 0 0
A11 大津 0 0
113 京都 0 0
B31 札幌 0 0
122 愛知 0 0
B11 堅田 0 0
B21 船橋 39,000 48,900
リスト
code store
115 大阪
121 仙台
321 八日市
131 福岡
132 香港
133 上海
211 台湾
221 関西
231 長岡
311 松元
114 東京
A11 大津
113 京都
B31 札幌
122 愛知
B11 堅田
B21 船橋
|
|