• 締切済み

excelマクロで複数の行を一回でグループ化

例えば以下のようなデータでA列からC列を一括でグループ化し、D列の合計額を集計したいのですが、どなたかコードをお教えいただきたくお願いいたします。 A列    B列    C列    D列 100    100    100    125 100    100    200    664 100    100    300    333 100    200    100    545 100    200    200    545 100    200    300    113 200    100    100    445 200    100    200    455 200    100    300    668 200    200    100    788 200    200    200    644 200    200    300    446 よろしくお願いいたします。

みんなの回答

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.6

エラーメッセージが書かれてないのでわかりませんが、 おそらくシートとSQLがあってないのだと思います。 提示したSQLではシート名はSheet1 シートの1行目はタイトル行で項目名が A列、B列、C列、D列です。 Debug.Print でSQLが表示されるようになっているので それも確認してください。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.5

サンプルです。 --- Sub mSyukei() Dim strSql As String Dim cnXL As Object Dim rsXL As Object Set cnXL = CreateObject("ADODB.Connection") Set rsXL = CreateObject("ADODB.Recordset") With cnXL .Provider = "MSDASQL" .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;" .Open End With strSql = "select A列, B列, C列, SUM(D列) " _ & " FROM [Sheet1$A1:D13] " _ & " GROUP BY A列, B列, C列" Debug.Print strSql rsXL.Open strSql, cnXL, adOpenForwardOnly Worksheets("sheet1").Cells(17, 1).CopyFromRecordset rsXL rsXL.Close: Set rsXL = Nothing cnXL.Close: Set cnXL = Nothing MsgBox "出力しました!" End Sub

belltree55
質問者

補足

ご回答ありがとうございます。 サンプルコードで試しましたが、以下のコードで詰まってしまいました。 これはどうしたらよろしいでしょうか? rsXL.Open strSql, cnXL, adOpenForwardOnly

回答No.4

サンプルがなければ、A:C列を選んでグループ化させてた。 特にマクロに関する丸投げは、回答つきにくいですよ。 ちょっと前に、似た質問が出てるし。 【Excel】条件を満たすデータをまとめる http://okwave.jp/qa/q7669412.html

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

お示しのデータがA列からD列の2行目から下方に入力されているとます。そこで作業列を設けて対応します。 E2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",A2&"/"&B2) F2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",A2&"/"&B2&"/"&C2) そこでお求めのデータですがG列にはA列でグループ分けしたデータを表示することにしてG1セルにはA列グループとでも入力します。 G2セルには次の式を入力して下方にドラッグコピーします。 =IF($A2="","",IF(COUNTIF($A$2:$A2,$A2)=1,SUMIF(A:A,A2,D:D),"")) H列にはA列とB列でグループ分けしたデータを表示することにしてH2セルには次の式を入力して下方にドラッグコピーします。 =IF($A2="","",IF(COUNTIF(E$2:E2,E2)=1,SUMIF(E:E,E2,D:D),"")) I列にはA列、B列およびC列でグループ分けしたデータを表示することにしてI2セルには次の式を入力して下方にドラッグコピーします。 =IF($A2="","",IF(COUNTIF(F$2:F2,F2)=1,SUMIF(F:F,F2,D:D),"")) 上の方法では数値が整然と並んでいないケースでも計算することができます。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

A列からC列をキーにするとすべて ユニークになるようですが。。。?

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

グループ化といってもどのようなグループ化をお望みなのでしょう。お示しの表での場合で示してください。

関連するQ&A