it-swarm-ja.tech

リンクの更新や数式の計算に時間がかかりすぎる巨大なExcelスプレッドシート

AYまで5000行と列のExcelスプレッドシートがあります(サイズ12MB)。最初の6列を除いて、残りにはvlookupsまたは他の数式が含まれています。すべてのvlookupは別のExcelワークシートにあります。リンクを手動で更新して数式を計算するようにExcelの設定を変更しました。これで、リンクを更新しようとするたびに、Excelがハングするか、15分ほどかかります。

現在、ワークシートを4つのインスタンスに分割する作業を行っています。 4つの異なるExcelシートを順番に更新します。ただし、インデックス列を次のステージに手動でコピーする必要があります。リンクの更新には3〜4時間かかります。昨日、次のようなエラーメッセージが表示され始めました。

Excelには、操作を完了するための十分なリソースがありません。

私には選択の余地がありませんでしたが、全体の操作を手動の介入を必要とする4つの小さなステップに分割しました。

INDEXを見ました。私の場合はあまり当てはまりません。どうすればそれをすばやく実行できるかについてのアイデアはありますか?

4
user7231

5000行×50列は大きなワークシートではありません。 12MBは完全に妥当な小から中程度のファイルサイズであり、データベースなどに作り直すほど大胆なことをする必要はありません。

あなたの説明から、問題はリンクにあるようです。参照されているワークブックの大きさはどれくらいですか?あなたがそれらにリンクするとき、それらは再計算していますか?私はプレオープニングのアイデアが好きです:あなたはその時何が起こっているかを見ることができます。

メモリ使用量(タスクマネージャを参照)が使用可能な物理RAMを超えていませんか?メモリをディスクにスワップアウトする必要があると、状況は大幅に遅くなり始めます。

事前起動と並べ替えのヘルプに加えて、非ルックアップ式を確認することをお勧めします。配列式に変換して、行ごとではなく計算ごとに1回呼び出すことができますか?

VLOOKUPについて:INDEX(value_range, MATCH(lookup_key, key_range))を使用してみましたか?それが速い状況があります。

VBAがあるかどうかはわかりません。その場合は、VBA関数が呼び出される回数とかかる時間を確認してください。 Excelオブジェクトを大量に参照するVBAコードは、コストがかかる可能性があります。

5
Mike Woodhouse

条件付きである必要はなく、同じままであるファイルにデータがある場合(たとえば、個人の生年月日)、最初のvlookupの後にデータを取得し、列全体を「コピー」および「形式を選択して貼り付け」/rowは、計算を実行するたびにファイルがそれらのセルを再計算しないようにします。私が気付いた別のvlookupから供給されたデータでvlookupを実行するには、かなりの時間がかかります。

4
Andrew

残念ながら、それはExcelスプレッドシートの場合と同じです... VBAはそこにある最速のオプションではありません。

データをMicrosoft Accessデータベースに移行することを検討してください。

2
Breakthrough

リンクを含むブックを開く前に、リンク先のブックを開きます。

そして、データを並べ替えてから、VLOOKUPの並べ替えオプションを使用します(最後のパラメーターにはTrueを使用します)。

2

私はこれを回避するためにOffice 10を使用します。

  1. 巨大なファイルを開いて、ファイルタイプのExcelワークブック1997-2003として再保存しました。
    • それは私に何かを尋ねるメッセージを促しました(私は思い出せません)。
  2. [OK]をクリックすると、新しいExcel1997-2003ファイルが作成されました。
    • ファイルは25MBから1MB未満になりました。
  3. 次に、今度は古い1997-2003ファイルから新しいワークブックに再度保存しましたが、さらに小さくなりました。

私は複数のワークブックでこの問題を抱えていましたが、これで常に解決しました。

2
Jason

多分より高速なコンピュータを入手するか、RAMをアップグレードしてください

1
DrJekl

データベースリンクが関係しているため、これが状況に役立つかどうかはわかりませんが、データベースクエリを実行するスプレッドシートを更新するのに時間がかかりすぎることを除いて、同じ問題が発生しました。

私が物事を15倍高速化する方法は、Excelでフィルター処理するのではなく、最初にクエリで必要なデータを選択させることでした。次に、DB接続の[接続プロパティ]ウィンドウで、[ブックを保存する前に外部データ範囲からデータを削除する]オプションをオンにしました。これは非常に役立ち、クエリを実行する可能性のある大量のデータでファイルのサイズが継続的に大きくなることはありませんでした。

これで、全体の更新に30〜45秒ではなく2〜3秒かかります。

0
NoCatharsis

私の経験では、外部ファイルへのリンクがすべての中で最も遅いプロセスであることがわかりました。これは、Excelが1つだけではなく、複数の異なるリンクファイルを介して毎回計算モデルを再更新する必要があるためであると読みました。

あなたの最初の投稿から、それがそもそも計算を遅くしていたのではないかと思います。すべてのデータを同じ作業ファイルに移動し、すべてのリンクをそのファイルの内部に更新しようとしましたか?

0
DaveRGP

マイク・ウッドハウスに同意します。これは多くのデータではありません。

テストとして、両方のスプレッドシートのデータを1つの新しいスプレッドシートにマージして、新しいスプレッドシートを作成します。これにより、データが2つの別々のスプレッドシートにあるために、問題が発生しているかどうかがわかります。これは問題にはならないはずですが、良いテストになるでしょう。

0
faf1967