web-dev-qa-db-ja.com

Excel2010 / 2013の挿入行が非常に遅い

テーブル構造または通常のセルに(手動またはその他の方法で)行を挿入するのが非常に遅いことがわかりました。テーブル(リテラル文字列のみを含む)または隣接するセルに、条件付き書式のないシートに7行を挿入するのに10分以上かかるように。

ワークブックには45のワークシートと20のテーブルがあり、大きなテーブルには約10KBのXMLファイルがあります。 33MB相当のスプレッドシートXMLがあり、そのほとんどが約300KBで、5つが1MBを超え、1つが15MBです。そのかなり複雑ですが、大規模ではありません。すべての計算は、左から右、上から下、右のシートから左のシートへとうまく流れ、私はほとんど配列数式を回避することができました。すべてのテーブルは規則的な構造を持ち、計算された列には1つの式しかありません。ほとんどのテーブル列は計算されますが、リテラルデータを含む小さな列は2、3個だけです。

私はいくつかのシートに多くの条件付きフォーマットを持っていますが、それを合理的に保ち、断片化しないように細心の注意を払っています:シート全体に約45のルールがあり、これらはすべての列をカバーするように一般化されています。フォーマット決定の主な処理は、ヘルパー列としてテーブルに移動されます。前述したように、構造は非常に規則的です。

これらのタイプの編集はスレッドセーフではないようです。そのため、1つのプロセッサのみが読み込まれ、ディスクアクティビティは非常に少なくなります。その間、Excelが何をしているのか理解できません。もちろん、計算を手動に設定しました...

この種のことを行と列の制限の増加に起因するコメントを見たことがありますが、なぜこれが要因になるのか理解できません。スプレッドシートのXMLファイルを見ると、値または数式で占められている行と列のコードしかありません。では、なぜ空いているセルが機能しているのでしょうか。

これは私の生産性に大きな影響を与えています-私は新しく見つけた空き時間にこのようなサイトを読んで多くを学んでいますが。可能であればこの問題を回避または回避できるように、問題が何であるかを本当に理解する必要があります。

誰かがそれについて私を助けることができますか?

人々がこれについて疑問に思っている場合に備えて、答えはExcelでパワークエリとパワービューを使用することです。中程度(50万行)のデータセットと複雑な構造および変換はすべて問題なく機能することがわかりました。テーブルで数式を使用することはもうありません。もう1つは、これが自然にPowerBIにつながるということです。それが私のヒントです。

9
Cool Blue

挿入時間が長いのは、列全体または行全体を参照するINDEX(または他の関数)が原因である可能性があります。

私は非常に似た問題を抱えていました:あまり複雑ではないワークシート(約2500行、15列のデータ(クエリの結果)、およびクエリ結果からデータを抽出するための約10列の式。列を挿入すると、最初の列は4秒程度で挿入される可能性がありますが、2回目の挿入には1分以上かかります。そうです!インターネットを検索してこのサイトを見つけました http://support.Microsoft.com/kb/2755145

私の経験:

ワークシートで= INDEX(11:11,1、MATCH(AC $ 5、$ 10:$ 10,0))のような数式を約25000回使用していました。各数式が行全体を2回参照していることがわかります。どうやら、列を追加したとき、各行が影響を受け、したがって各数式が影響を受けたため、Excelはそれについて何をすべきかを理解しようと忠実に作業に取り掛かりました。

MicrosoftのWebサイトで学んだことに基づいて、数式を= INDEX(QueryResults、ROW()-ROW(QueryHeaders)、MATCH(AC $ 5、QueryHeaders、0))に変更しました。ここで、QueryResultsとQueryHeadersは単純な名前付き範囲です。

シート全体でこの変更を行った後、列の挿入はほぼ瞬時になりました-1秒未満。

3
Chuck Trese

これは、ここで説明されている問題のように聞こえます http://fastexcel.wordpress.com/2012/01/30/Excel-2010-tableslistobject-slow-update-and-how-to-bypass/

もしそうなら、あなたはそれをバイパスするために条件の1つを破らなければなりません:
この速度低下が発生するには、次の各条件が満たされている必要があります。

A cell within the Table must be selected
The sheet containing the Table must be the Active Sheet
The cell being updated must be on the same sheet as the table, but does not have to be within the table
There must be a reasonable number of formulas in the workbook.


別のシートをアクティブにして、VBAを介して間接的に更新を行うことができるかもしれません。または、すべての数式を別のブックに移動すると、それがバイパスされる可能性があります。
またはテーブルを通常の範囲に変換し直します(必要に応じてダイナミックレンジ名を使用します)

1

条件付き書式を削除し、メインコードが完了したら、vbaで再適用してみてください。私のために働いた。

0
avalanche1