• ベストアンサー

エクセルのループ処理について

ループ処理で、2つのシートを内容を比較して 一方のシートにあったデータを別のシートのリストから削除しています。しかし、単純なループ処理でやるとすごく時間がかかるので早く処理する方法を教えていただければと思います。 シートA(3000件)とシートB(5000件程度)があり,AとBともにデータのソートを行なっています。そして、 シートAの特定セルのデータを順番に読み、その内容がシートBのあるセルのデータと一致するか検索し、セル値が同じ場合、シートBの行を削除するような仕組みです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

こんにちは > すごく時間がかかるので ソースが無いのでなんとも言えませんね Application.ScreenUpdatingは使ってみましたか

mysawaki
質問者

お礼

ありがとうございます。 アドバイスを参考しましたら、ずいぶんと高速になりました。 さらに改善し高速化を目指します。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

#3です。 重要なのは重複検索するのが、 ・双方1列 ・双方複数列の組み合わせ 等にも影響します。 画面更新を止めてなくてと言う事なら、#1さんの方法がいいかも。 止めても遅いのなら別途補足されては如何でしょう。

mysawaki
質問者

お礼

ありがとうございます。 #1さんのアドバイスを参考しましたら、ずいぶんと高速になりました。 さらに改善し高速化を目指します。

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

シート構成が不明なのでわかりませんが、直接セルを見ながらではなく、 一旦配列に放り込んでデータ検索・削除を行ない、その後書き出してみるとか? ただ列数が多いとパンクするかも?

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

Aシート側のデータで、Bシートのデータ範囲に対し、Findメソッドで検索すればよい。Aシートデーターー>Bシートデータが複数(多)該当ならFindNextを続ける。 WEBに「Find VBA」で検索すること。コード例が沢山出るでしょう。 http://officetanaka.net/excel/vba/cell/cell11.htm など多数 ほんとに処理完了が早くなるか判らないが、これしかやってみる方法はないでしょう。 ーー >シートAの特定セルのデータ と「特定」なんて、持って回った言い方は、読者にわからない。 この出現の仕方が、VBAコードの複雑さを左右するよ。 同一列に順次現れると一番簡単なパターン。 VBAコードを作る課題ポイントは (1)シートAの特定セルのつかみ方 (2)Find,FindNextの使い方。 見つからないとき、最終が見つかった時の捉え方 A.ObjectのNothing法 B.最初見つかった行にもどった際を、終わりと判定する法 など有る。 (3)行削除のやり方 下行から削除する、も良い点は有るが、下行から検索するReverseFindはVBAには無いようだ。

mysawaki
質問者

お礼

ありがとうございます。 #1さんのアドバイスを参考しましたら、ずいぶんと高速になりました。 上記アドバイスの方法で、さらに改善し高速化を目指します。

すると、全ての回答が全文表示されます。

関連するQ&A