Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11914 / 13645 ツリー ←次へ | 前へ→

【13321】集計表の作り方について MICHIKO 04/5/1(土) 17:32 質問[未読]
【13325】Re:集計表の作り方について 中2のVBA通 04/5/1(土) 18:34 回答[未読]
【13331】Re:集計表の作り方について Asaki 04/5/1(土) 20:10 回答[未読]
【13334】Re:集計表の作り方について MICHIKO 04/5/1(土) 21:03 質問[未読]
【13338】Re:集計表の作り方について Asaki 04/5/2(日) 16:09 回答[未読]
【13355】Re:集計表の作り方について MICHIKO 04/5/2(日) 22:19 お礼[未読]
【13357】Re:集計表の作り方について 中2のVBA通 04/5/2(日) 22:35 発言[未読]

【13321】集計表の作り方について
質問  MICHIKO  - 04/5/1(土) 17:32 -

引用なし
パスワード
   5つの項目(A〜E)でソートされたデータの金額欄を集計する表を作るマクロをVBAで作りました。
あまりExcelになれてないので、シーケンシャルに1行ずつ読んでいって
別シートに表を作成したのですが、データが2万行もあるので、膨大な処理時間になってしまうことが解り、途方に暮れています。
下記のようなことがしたいのですが、Excelの集計機能を使って出来るでしょうか?
また、集計機能を使った場合、アウトライン表示以外で表示することは出来るでしょうか?
集計機能以外でも良い方法があったら教えて頂きたくよろしくお願いします。
(入力)
A  B  C  D  E  金額   : A〜Eが同じデータで個別行を表示
a1  b1  c1 dd ee  100   : A,Bが変わったら小計を表示
a1  b1  c1 dd ee  200   : A  が変わったら合計を表示
a1  b1  c2 dd ee  100   :  最後に総計を表示
a1  b2  c1 d1 e1  400   :
a2  b2  c1 d1 e1  300
(出力)
a1  b1  c1 dd ee  300
a1  b1  c2 dd ee  100
 小計(a1,b1)      (400)
a1  b2  c1 d1 e1  400
 小計(a1,b2)      (400)
 a1の合計         (800)
a2  b2  c1 d1 e1  300
 小計(a2,b2)      (300)
 a2の合計         (300)
  総計          1100

【13325】Re:集計表の作り方について
回答  中2のVBA通  - 04/5/1(土) 18:34 -

引用なし
パスワード
   たぶん一番短いコードはこうでしょう。
For to next の中にFor Each in … Nextっていうくり返し処理をします。

Dim i As Byte, j As Long
Dim o As Range
j = 0
 For i = 1 to 5
  For Each o in Range(Cells(i, 1):Cells(i, 5))
   j = j + o.Value
  Next o
  Cells(i, 6).Value = j
 Next i

これで 金額を求めます
For each で一定のセル範囲に対して、一回ずつ処理をして行くので、
それを for next (数値のくり返し)と連携させています
総額を表示は
j = 0
for each o in Range(cells(1, 5):cells(65536, 5).end(xlup))
  j = j + o.value
next o
  答えを入れたいセル.value = j

自動的にはちょっと分かんないのですみません(T。T)
あと、意図が違っていたらごめんなさい
ではさよなら

【13331】Re:集計表の作り方について
回答  Asaki  - 04/5/1(土) 20:10 -

引用なし
パスワード
   こんにちは。

集計機能は試されましたか?
Aで集計
Bで集計
全体をコピーして値のみ貼り付け
集計を全て削除(グループ化の解除でも、たぶんOK)
で、同じ位置に集計表が出来ました。
別シートがよければ、コピーした貼り付け先を別のシートにすればよいかと。
データが多いので、上手くいくかどうか解りませんが。。。

また、ループするのであれば、
一旦すべてのデータを配列に格納して、
別の配列に集計していくことをお薦めします。
で、出来上がった集計の配列を、シートに書き戻します。

【13334】Re:集計表の作り方について
質問  MICHIKO  - 04/5/1(土) 21:03 -

引用なし
パスワード
   ▼Asaki さん:

早速回答頂いてありがとうございました。
集計も試してみたのですが、アウトライン表示を外す方法が解りませんでした。
教えて頂いた、コピーして値のみ貼り付けで実現できました。
本当にありがとうございました。
出来たら、さらに教えて頂きたいことがあるのですが、
実は、集計したときに集計金額が1万円未満のグループは表示しないという条件があります。
集計した後、条件によってそのグループ全体を削除する良い方法があったら
教えて頂けますでしょうか?
これが、難しいようであれば、もう一つ教えて頂いた方法
(配列を使う)でやってみようかとも思っています。
お忙しい中回答頂いたのに重ねての質問で、申し訳ありませんがよろしくお願いします。

【13338】Re:集計表の作り方について
回答  Asaki  - 04/5/2(日) 16:09 -

引用なし
パスワード
   >集計も試してみたのですが、アウトライン表示を外す方法が解りませんでした。
集計の結果を、一旦コピーして、同じ場所に値のみ貼り付けしておいて、
再度集計のダイアログを表示、「すべて削除」ボタンをクリックすると、
集計結果はそのままで、アウトラインだけ外せました。

>集計した後、条件によってそのグループ全体を削除する良い方法があったら
>教えて頂けますでしょうか?
とりあえず、オートフィルタで条件に該当するグループを探して、
そのグループをループして削除していく、というのしか、思いつきません。

初めから配列で処理するのが、トータルでは速いかもしれませんね。

【13355】Re:集計表の作り方について
お礼  MICHIKO  - 04/5/2(日) 22:19 -

引用なし
パスワード
   ▼Asaki さん:
>初めから配列で処理するのが、トータルでは速いかもしれませんね。
そうですね。 配列でやってみようと思います。
色々教えて頂いて、ありがとうございました。
とても勉強になりました。

【13357】Re:集計表の作り方について
発言  中2のVBA通  - 04/5/2(日) 22:35 -

引用なし
パスワード
   すみません。
For Eachでは時間かかりすぎましたね。
なにかいいほうほう検討してます。

11914 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free