- ベストアンサー
Excel:条件にあったものを集計したい
- Excelを使用して条件に合致するデータを集計する方法について紹介します。
- 具体的なデータの例として、組織、課コード、課名、税抜金額、消費税、備考、コードの情報を持つ表があります。
- 条件を別のシートに入力し、その条件に合致するデータを集計し、結果を別のシートに表示する方法を説明します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>実際には、A列~L列まで項目があり、データも月々の量が、変更のため3000列でためして見たのですが、 デバックで終了してしまうところがあるのです。 そんな大きなデータは持ってないんで100行くらいのデーターで試したんですが問題なく実行できたのですが・・・ >集計のための並び替えや、3番のデータのコピーに関しても、その時々によって量が違うため、1500列にしてみました。それが、いけないのでしょうか? データのコピーに関してはL列が集計項目ならL1を選択して〔Shift〕+〔Ctrl〕+〔↓〕キーを押して〔Shift〕+〔Ctrl〕+〔←〕キーで選択するとマクロ修正しなくても良いみたいです。 L列が集計項目で無い場合はM列にダミーの集計項目を置いて選択コピー後削除したらよいかと思います。 参考までに記録したマクロを: Sub Macro1() ' ' ' Application.CutCopyMode = False Range("A1:l3000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Sheets("Sheet2").Range("A1:l2"), Unique:=False Selection.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(7, 8), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Range("l1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToLeft)).Select Selection.Copy Sheets("Sheet3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Application.CutCopyMode = False Selection.RemoveSubtotal ActiveSheet.ShowAllData Range("A1").Select End Sub
その他の回答 (4)
- web2525
- ベストアンサー率42% (1219/2850)
補足 =0145はコードの下に入力です 表示が変わっていたスペースだけの入力は無視されるのね ^^;;
補足
実際には、A列~L列まで項目があり、データも月々の量が、変更のため3000列でためして見たのですが、 デバックで終了してしまうところがあるのです。 集計のための並び替えや、3番のデータのコピーに関しても、その時々によって量が違うため、1500列にしてみました。それが、いけないのでしょうか?
- web2525
- ベストアンサー率42% (1219/2850)
私も言葉足らずだったかな? まず別シートにフィルターオプション用の条件指定欄を作成し条件を指定します。 組織 課コード 課名 税抜金額 消費税 備考 コード =0145 1.マクロの記録ON→その後フィルターオプションを実行します。※検索条件範囲は条件指定欄を選択 2.集計機能を使い〔グループの基準〕を"課名"を指定、〔集計方法〕は合計、〔集計フィールド〕は"税抜金額"と"消費税"を指定。 3.データの選択してコピー ※後でマクロの手直しが必要かな? 4.保存用シートに値のみ貼り付け 5.アウトラインのクリア 6.データを全て表示 7.マクロ記録終了 これで出来ると思うけど、3の選択するところのマクロを若干の手直しが必要。
- imogasi
- ベストアンサー率27% (4737/17069)
マクロ・VBAで出来ますが 関数式で抜きだして見ますのでこれで辛抱できないか考えて見てください。 (1)1条件(質問のコードだけ) (2)課名で小計を出すのが別途になる (3)作業列を使う など制約はありますが。 (例データ) 組織 課コード 課名 税抜金額 消費税 備考 コード aaa 123 経理 3243 282 xxx 145 1 aaa 123 経理 8227 411 yyy 418 1 aaa 125 総務 1543 77 zzz 145 2 aaa 123 経理 9810 490 nnn 145 3 ------- Sheet2に条件の145を入れる ------- Sheet3の第1行にSheet1の第1行を複写 (関数式)Sheet1 H列を作業列で使います。 H2セルに=COUNTIF($G$2:G2,Sheet2!$A$1) H5複写 (関数式)Sheet3 A2に=OFFSET(Sheet1!$A$2,MATCH(ROW()-1,Sheet1!$H$2:$H$5,0)-1,COLUMN()-1) G2までまず横方向へ式を複写。 A2:G2を範囲指定し、G2で+ハンドルを出して3行分複写。 #N/Aなどのエラー値を出さなくする方法はありますが略。 (結果)Sheet3 組織 課コード 課名 税抜金額 消費税 備考 コード aaa 123 経理 8227 411 yyy 418 aaa 125 総務 1543 77 zzz 145 aaa 123 経理 9810 490 nnn 145
お礼
ありがとうございます。 チャレンジしてみましたがうまくいきませんでした。 たぶん、私のやり方がいけないのですね。
- web2525
- ベストアンサー率42% (1219/2850)
〔フィルターオプション〕+〔集計〕で表示された結果を別シートにコピーする動作をマクロで記録できるすれば可能かな?
補足
早速の回答ありがとうございます。 言葉が足りなかったです。 条件の数字は、変わることがあるので、条件を入力したセルを参照できればと思うのですが…。
お礼
無事に仕上げることができました。 本当にありがとうございました。