Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2013)
発注表に集計ボタンを作って別シートへ集計表を作成したい
投稿日時: 21/01/13 17:01:55
投稿者: aoyagi

元データのsheet1に集計ボタンを作成しクリックするとsheet2に同品名同等級のものをサマリーした集計表を作成したいと思っております。
この場合、どのような構文になるのかアドバイス頂ければと思います。
よろしくお願いします。
  
sheet1
 A列   B列  C列  
1 品名   等級  発注数
2 みかん  L    10
3 みかん  L    12
4 みかん  M    20
5 みかん  M    23
6 りんご  L    1
7 りんご  L    3
8 りんご  M    5
9 りんご  M    7
    
sheet2
 A列   B列  C列
1 品名   等級  発注数
2 みかん  L    22
3 みかん  M    43
4 りんご  L    4
5 りんご  M    12

回答
投稿日時: 21/01/13 21:00:39
投稿者: WinArrow
投稿者のウェブサイトに移動

一般機能でも可能です。チャレンジしてみますか?
 
(1)Sheet2にSheet1のA列+B列の重複を削除したデータを作成します。
手順1
Sheet1のA列とB列をSheet2のA列、B列に複写します。
手順2
Sheet2のA列とB列を選択して
「データ」ー「重複の削除」を実行します。
 
(2)Sheet2のC列に次の数式を入力します。
C2セル
=SUMPRODUCT((Sheet1!$A$2:$A$xxxx=A2)*(Sheet1!$B$2:$B$xxxx=B2)*(Sheet1!$C$2:$C$xxxx))
下へフィルドラッグ
※xxxxは、データの最終行
 
ループを使って検索、集計より…断然はやい
 
 

回答
投稿日時: 21/01/13 21:32:45
投稿者: simple

私はピボットテーブルを使うことを推奨しておきます。
それはこうしたケースのためにExcelに備えられた機能だからです。
ピボットテーブルを一度作成しておけば、
データ範囲を調整するマクロを実行するだけです。
 
もちろんコードで作成することもできますが、
こうしたケースのたびに作っていたら手間です。
ピボットテーブルは色々な集計方法に柔軟に対応することも出来ますので、
今後のためにも有益だと思います。
 
コードの練習とかを主目的とした質問なら、例えばこんな書き方があるでしょう。

Sub test()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim dic As Object
    Dim k&, p&
    Dim s$
    Dim key As Variant
    
    Set dic = CreateObject("Scripting.Dictionary")
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")
    
    '集計
    For k = 2 To ws1.[A1].End(xlDown).Row
        s = ws1.Cells(k, "A").Value & vbTab & ws1.Cells(k, "B").Value
        dic(s) = dic(s) + ws1.Cells(k, "C").Value
    Next
    
    '結果の転記
    p = 1
    For Each key In dic.keys
        p = p + 1
        ws2.Cells(p, "A").Resize(1, 2).Value = Split(key, vbTab)
        ws2.Cells(p, "C").Value = dic(key)
    Next
End Sub

トピックに返信