- ベストアンサー
重複するデータの個数と合計
こんにちは、2度目の質問です。 またブチ当たってしまいました。 A | B 1 A01 | 100 2 B01 | 100 3 A01 | 20 4 C01 | 20 5 A01 | 30 6 A01 | 100 7 A01 | 50 8 C01 | 60 9 B01 | 80 上記のような表があります。 このとき、セル"A1"~"A9"までの、 「A01」の個数は何個か、 「B01」の個数は何個か、 「C01」の個数は何個か、 また、セル"B1"~"B9"までの、 「A01」のB行における数値の合計はいくつか、 「B01」のB行における数値の合計はいくつか、 「C01」のB行における数値の合計はいくつか、 と言うマクロを考えなくてはなりません。 この例のように、たかだか3個とか10個ぐらいなら"COUNTIF"関数を使えばなんて事無いのですが、 この「A01」のような物が1000以上(例えて言うとA0001~A1000と言った感じ)あり、 それが全てランダムで出てきますので、関数で行うのは無理のような気がします。 また、この様な情報が記入されたシートが膨大な量あり、このシート全てに同じ処理を 行わなくてはならず、オートフィルタは使いたくありません。 出来れば、ボタン一発で計算したいのです。 条件に合った重複データの抽出、という質問は良く見かけますが、この様に条件付けが難しい場合は、 どのようにマクロを組めば良いでしょうか、何卒アドバイスをお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
個数の合計ならCOUNTIF、単一条件の合計ならSUMIF といったワークシート関数でやったほうが簡単ですよ VBAでやるとなると 配列にデータを取得してそれをカウント、または合計といったことになると思います Dim ar() Dim colN, colS, obj dim n as integer, j as Integer Set colN = CreateObject("Scripting.Dictionary") Set colS = CreateObject("Scripting.Dictionary") ar = Sheet1.Range("A1").CurrentRegion.Value ' colNに個数をカウント ' colSにデータの合計 for n = 1 to Ubound(ar) if colN.Exists(ar(n,1)) then j = colN(ar(n,1)) colN.Remove ar(n,1) colN.add ar(n,1), j + 1 else colN.add ar(n,1), 1 end if if colS.Exists(ar(n,1)) then j = colS(ar(n,1)) colS.Remove ar(n,1) colS.add ar(n,1), j + ar(n,2) else colS.add ar(n,1), ar(n,2) end if next for each obj in colN.keys debug.print obj, colN( obj ), cols( obj ) next といった具合でしょう
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
> 「A01」のB行における数値の合計はいくつか、 > 「B01」のB行における数値の合計はいくつか、 >「C01」のB行における数値の合計はいくつか、 「ピボットテーブル」を使えば一発でしょう。 一から説明するのは大変なので、ヘルプでピボットテーブルについて調べてみてください。 http://www.moug.net/skillup/adpc/an022-3.htm
お礼
回答有難う御座います。 ピボットテーブルと言うのは知っていましたが、実際に使ってみたことはありませんでした。 と言うか、どんな時に使えばいいのか解らなかったのですが・・ この方法もチャレンジしてみます。 ありがとうございました。
お礼
回答ありがとうございました。 かなり難解なプログラムですが、この方法でやってみます。
補足
回答有難う御座います。 VBA初心者の私には、相当難解です・・ VBAの辞典で一個一個プログラムの意味を解析してみます・・・。 ええーーっと。すいませんが。 例えば、"A1~A9"には、「A01」「B01」「C01」がある。 と言う抽出をするような方法は有りませんでしょうか、この抽出が出来れば、後はそれを条件としてカウントしたりする関数は思いつくのですが。 質問にあるように、この「A01」「B01」にあたる物が1000以上あり、全てランダムに出てきてしまうのです。 "A1~A9"には、A01が9個かもしれないし、A01が1個でB01が1個でC01が7個の場合もある。 A01が2個で、D01が1個で、G01が1個で、H01が1個で後は空白の場合もあるのです。 A1~A9にあるランダムな値を、抽出するような方法ってあるでしょうか。 何度も申し訳ありません、何卒ご教授お願いします。