- 締切済み
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 よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- o_chi_chi
- ベストアンサー率45% (131/287)
エラーメッセージが書かれてないのでわかりませんが、 おそらくシートとSQLがあってないのだと思います。 提示したSQLではシート名はSheet1 シートの1行目はタイトル行で項目名が A列、B列、C列、D列です。 Debug.Print でSQLが表示されるようになっているので それも確認してください。
- o_chi_chi
- ベストアンサー率45% (131/287)
サンプルです。 --- 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
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
サンプルがなければ、A:C列を選んでグループ化させてた。 特にマクロに関する丸投げは、回答つきにくいですよ。 ちょっと前に、似た質問が出てるし。 【Excel】条件を満たすデータをまとめる http://okwave.jp/qa/q7669412.html
- KURUMITO
- ベストアンサー率42% (1835/4283)
お示しのデータが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)
A列からC列をキーにするとすべて ユニークになるようですが。。。?
- KURUMITO
- ベストアンサー率42% (1835/4283)
グループ化といってもどのようなグループ化をお望みなのでしょう。お示しの表での場合で示してください。
補足
ご回答ありがとうございます。 サンプルコードで試しましたが、以下のコードで詰まってしまいました。 これはどうしたらよろしいでしょうか? rsXL.Open strSql, cnXL, adOpenForwardOnly