プロが教える店舗&オフィスのセキュリティ対策術

エクセル内で別シートから情報を読み込んで集計シートに反映させているのですが読み取り項目を15列100行から15列640行に増やしたら処理速度がとんでもなく遅くなってしまいました。今はいない人が作ったものをいじっただけだったのでよくわからずやってしまったところもありどうしたらいいのか教えてください。

B8:=VLOOKUP(操作画面!C6,INDIRECT("Sheet1!A10:DO100"),操作画面!E6,FALSE)
C8:=VLOOKUP(操作画面!C7,INDIRECT("Sheet1!A10:DO100"),操作画面!E7,FALSE)
D8:=VLOOKUP(操作画面!C8,INDIRECT("Sheet1!A10:DO100"),操作画面!E8,FALSE)

P8:=VLOOKUP(操作画面!C20,INDIRECT("Sheet1!A10:DO100"),操作画面!E20,FALSE)

B8:=VLOOKUP(操作画面!C6,INDIRECT("Sheet1!A10:DO100"),操作画面!E6,FALSE)
B9:=VLOOKUP(操作画面!C6,INDIRECT("Sheet2!A10:DO100"),操作画面!E6,FALSE)
B10:=VLOOKUP(操作画面!C6,INDIRECT("Sheet3!A10:DO100"),操作画面!E6,FALSE)

B683:=VLOOKUP(操作画面!$C$6,INDIRECT("Sheet676!A10:DO100"),操作画面!$E$6,FALSE)

「エクセル処理のスピードアップがしたいです」の質問画像

質問者からの補足コメント

  • うーん・・・

    ちなみに列や行は毎回全部使うわけではなく5列10行といった毎回異なる使用をします。

      補足日時:2019/06/29 14:22

A 回答 (4件)

突っ込みどころが多過ぎてどうしたものやら……



VLOOKUP関数自体が処理を重くする原因に繋がります。列の範囲が多い
場合は INDEX/MATCHに切り替える方が少しだけましです。

もっと処理を速くしたいなら 絶対一致検索自体を止めて データを昇順に
並び替えた上で近似値検索×2にした方が良いです。

次に INDIRECT関数は論外です。この関数は TODAYや RANDなどと同じ
で結果が常に揮発します。大量に入れると全く関係ないセルを編集しても
いちいち再計算がかかります。なので基本的には1つたりとも使わないの
がベストです。真っ先に見直すべきはここです。

INDIRECTや OFFSETは条件付き書式や入力規則以外では使わないものと
思っておいた方がいいくらいです。

その上で範囲をテーブル書式にして構造化参照にすれば無駄が省けます。
いちいち範囲を指定するのも無駄なので。

もっというならそもそも シートを大量に1ブックに入れるような作り方
からして見直すべきです。検索のデータは一元管理が基本中の基本です。

おそらく修正するのも難しいくらい重くなっているでしょうから まずは
自動計算を手動にしてから 数式を見直すのがいいかと思います。
    • good
    • 0

これは、様式の同じデータシートをSheet1~Sheet676という名前で、同じbookに入れて、


❶そのbookの中に操作画面というシートを作ってあって、その操作画面というシートの(C列とE列に)、
❶-1 Sheet1~676のA列にある値の中で検索する名前をC列に、
❶-2 その検索できた名前のある行の中で引き出す数値などの値があるはずの列位置をE列にいれておいて

❷別途、質問文に記載されている数式があるシートも、同じbookにあって、そのシートのイメージが画像で
(この画像では、Sheet1~Sheet676があるようには見えないけれども)
 6行目には Sheet1からの検索結果を横に並べて表示する
 7行目には Sheet2からの検索結果を横に並べて表示する
 8行目には Sheet3からの検索結果を横に並べて表示する
  |     |
 676行目にはSheet671からの検索結果を横に並べて表示する

ということでしょうか。 
試しに、800枚のシートのそれぞれに、10~100行×A~ET列に文字データを入れて、似たようなことをしてみました。
一応動きます。
ですが、800枚のシートのそれぞれに、10~100行×A~ET列に数式で値が出るようにしたら、処理時間がとんでもないことになりました。

これは、EXCELが自動的に全部のシートの全部の数式を再計算しなおしているからなので、
この自動的に再計算するのを止めてしまうと、処理時間が大幅に短縮されることもあります。
その方法は、  https://next.rikunabi.com/journal/20180401_s01/

ただ、目的によっては、別の方法の方がイイケースもあります。
もともと、Sheet1~~に数式がなくて、データの値だけが入っているようにしておけば、
操作画面というシートや、結果をだすためのシートのB8:P700に検索用の数式が入っていても、それほど処理時間は懸からないと思います。
もしも、Sheet1などのデータを他の処からコピーしてくるのであれば値だけを貼り付けるとか、データや数式を貼り付けた後でもそのシート全体をコピーしてから値の貼付をすれば、できます。
https://www.excelspeedup.com/ataiharituke/

なお、別件ですが、【結果を出すためのシート】がただの縦横表の様にみえます。 ということから想像すると、画面操作シートのC列やE列のデータのどちらかは何か規則性があるか、同じデータが続いているように思えます。
もしも、そうならば、操作画面シートの作り方を変更して、それに合わせて、【結果を出すためのシート】の数式も直すと、使いやすくなるかもしれません。(たぶん処理速度は実感に出るほどの差はでないけれど)
    • good
    • 0

シートの数が多すぎ。



1つのブックに100程度が適切ならば、ブックを分けましょう。
    • good
    • 0

INDIRECTって事は単純に数値じゃないんでしょうね


640行
そりゃ遅いでしょ。
    • good
    • 0

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