Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5408 / 13646 ツリー ←次へ | 前へ→

【50994】複数シートないの並べ替え(リスト通り)→集計 ペコ★ 07/8/24(金) 14:40 質問[未読]
【51002】Re:複数シートないの並べ替え(リスト通り... Jaka 07/8/24(金) 15:45 発言[未読]
【51007】Re:複数シートないの並べ替え(リスト通り... ペコ★ 07/8/24(金) 16:45 発言[未読]

【50994】複数シートないの並べ替え(リスト通り)...
質問  ペコ★  - 07/8/24(金) 14:40 -

引用なし
パスワード
   下記のような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    船橋

【51002】Re:複数シートないの並べ替え(リスト通...
発言  Jaka  - 07/8/24(金) 15:45 -

引用なし
パスワード
   シートの見方がよく解りませんけど、
DBイメージの集計でよければ、SUMPRODUCT関数でできそうなんですけど。

種類が「coke」で、storecodeが「115」の場合の7月なら
=SUMPRODUCT((A3:A17="coke")*(C3:C17=115),D3:D17)

種類が「coke」で、storecodeが「115」の場合の8月なら
=SUMPRODUCT((A3:A17="coke")*(C3:C17=115),E3:E17)

こんな感じになります。
SUMPRODUCT関数をマクロで使うなら、「SUMPRODUCT」で検索すれば何個か見つかると思います。

全く違ってたらすみません。

【51007】Re:複数シートないの並べ替え(リスト通...
発言  ペコ★  - 07/8/24(金) 16:45 -

引用なし
パスワード
   早々にありがとうございます。

操作の流れとしては
元DBを種類別にフィルタし
結果を種類名のシートに保存する。

抽出された各シートの中でリストの並び順で
自動集計する。
というように考えていました。

sumproductで足しこむのも手ですよね。
関数自体はいいのですが、全体の流れがなかなか
思いつかなくって。
すみません。

すぐには出来そうもないです。


▼Jaka さん:

>シートの見方がよく解りませんけど、
>DBイメージの集計でよければ、SUMPRODUCT関数でできそうなんですけど。
>
>種類が「coke」で、storecodeが「115」の場合の7月なら
>=SUMPRODUCT((A3:A17="coke")*(C3:C17=115),D3:D17)
>
>種類が「coke」で、storecodeが「115」の場合の8月なら
>=SUMPRODUCT((A3:A17="coke")*(C3:C17=115),E3:E17)
>
>こんな感じになります。
>SUMPRODUCT関数をマクロで使うなら、「SUMPRODUCT」で検索すれば何個か見つかると思います。
>
>全く違ってたらすみません。

5408 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free