dポイントプレゼントキャンペーン実施中!

けしたい
得意先ごとにシートを作成している現金割賦の表で、条件に該当するセルの値を別シートに値貼り付けするVBAを教えて頂けないでしょうか?

現在SUMPRODUCTとINDIRECTを使用してなんとか一覧に表示しているのですが、処理速度がかなり遅く、シートの内容を更新する度にかなりの時間がかかる為、VBAで処理速度を早くできないかと思っています。VBAで色々検索してみて、セルを指定して抽出する方法は見つけたのですが、それでは期が変わるたびに構文を変更しなくてはいけない為、変更しなくても対応できる構文はないものかとこちらに質問いたしました。

画像の参照をお願い致します。(画像のシートは全て実際のセル番地と同じです)

画像Aは1シート、画像Bは複数シート、同じブックにあります。
ブックは1期毎にコピーして作成する為、画像Aは12か月分のみの一覧となります。

やりたい事は下記の2つです。
1:得意先名と引落日が一致した引落金額と口座数を抽出して、それぞれのセルに値貼り付け
2:担当者名と引落日が一致した口座数を合計して、それぞれのセルに値貼り付け

関数で抽出する際の構文(?)は下記の様にしてます。

画像AのC5セルには下記の関数で抽出してます。
IFERROR(SUMPRODUCT((INDIRECT("'"&$A5&"'!A$12:A10000")=B5)*(INDIRECT("'"&$A5&"'!D$12:D10000"))),"")

画像AのD5セルには下記の関数で抽出してます。
IFERROR(SUMPRODUCT((INDIRECT("'"&$A5&"'!A$12:A10000")=B5)*(INDIRECT("'"&$A5&"'!C$12:C10000"))),"")

両方とも下方向にドラッグして右方向に2つとびにコピーして使用しています。

説明が下手で申し訳ありませんが、宜しくお願い致します。

「VBA 複数あるシートから複数条件に一致」の質問画像

A 回答 (1件)

こんばんは!



VBAでやるにしても画像があまりに小さすぎるので、
こちらで勝手に行・列番号を決めて、
コードを記載しても無意味のようなので、VBAでの回答ではありません。

SUMPRODUCT関数は配列数式になります。
極端に広い範囲を範囲指定してしまうと計算速度が落ちます。
数式を拝見すると10000行まで範囲を指定していますが、実際のデータは10000行あるのでしょうか?

仮に10000を1000にするだけでも格段に計算速度は速くなります。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

画像の拡大ができない事を今更知りました。
チェック不足で申し訳ありません。

上席の者から、ずっと使えるように・・・という指示が出ていた為、
10000にしていたんですが、1000にするとかなり早くなるので、
当分はこれで進めます。
ありがとうございました!

お礼日時:2018/02/28 09:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています