2016-09-26 5 views
0

小さなExcelファイル(35列、2000行、隠しコンテンツなし)で行処理を行うVBスクリプトがあります。 .xlsファイルに適用すると、ファイルの処理に約3秒かかります。 .xlsxファイルを.xlsxファイルとして保存すると、同じスクリプトで約30〜60秒かかり、処理が完了して結果は正しいものの、Excelが完全にフリーズします。XLSファイルで正常に動作するが、XLSXファイルでハングするVBAスクリプトのプロファイル/デバッグ方法

私は、コードの一部のループ部分が原因だと思っていますが、私はそれを見つける必要があります。私はprintf -debuggingと似ていますが、それは非常にエレガントではなく、また大規模なスクリプトのために多くの時間を消費する、基本的にhttps://stackoverflow.com/a/3506143/5064264のようなスクリプトが手でスクリプトのすべての部分をタイミングすることになります。

ほとんどのIDEのパフォーマンスアナライザのような半マニュアルプロファイリングの方が良いでしょうか、あるいはこの問題に対する他のアプローチがありますか?私はかなり長いので、コードを投稿したくないですし、将来私は他のスクリプトのためにそれを解決したいと思います。

+2

xlsファイルの最大行数は65,536です。 xlsxファイルの最大行数は1,048,576です。私は '.Rows'を検索することから始めます。私の推測では、いくつかのコードでは、データを含む行だけでなく、ワークシート全体を反復処理しています。 – Comintern

+0

@ Comintern提案していただきありがとうございます。私はそれらの出現を固定値で置き換えました、そして、これはそれに貢献するかもしれません。 – user121391

答えて

0

私の場合のエラーは、Cominternのコメントが示唆しているように、方法は、値を持つセルだけでなく、列全体を辞書にコピーして並べ替える方法でした。将来の読者のためにこれを保存するために、私は彼/彼女の優秀なコメントをここにコピーしています、もう一度ありがとう!

xlsファイルの最大行数は65,536です。 xlsxファイルの最大行数は1,048,576です。私は.Rowsを検索することから始めます。私の推測では、いくつかのコードでは、データを含む行だけでなく、ワークシート全体を反復処理しています。一般的なプロファイリングまたはどのようにそこに着くためとして


、私は(セット/コードエディタの行番号列に左クリックで削除)エディタでブレークポイントを大量に使用しました。

  • メインメソッドで20行ごとに最初に設定し、大きなデータセットでプログラムを実行してから、遅いかどうか手動で測定するcontinue(F5)を押すたびに実行します。
  • 次に、高速領域でブレークポイントを削除し、低速領域でブレークポイントを追加してメソッドに絞り込み、メソッド内の行に絞り込みました。
  • 最後に、責任コード行をコメントアウトして修正するかどうかを検証できました。
0

はい - 種類の。私はこれを使って、どれくらい速く動作しているかをテストし、より良いタイミングを得るためにさまざまなアプローチを試しています。私はSOのどこかからこれを盗んだ。

sub thetimingstuff() 

Dim StartTime As Double 
Dim SecondsElapsed As Double 

StartTime = Timer 

'your code goes here 

SecondsElapsed = Round(Timer - StartTime, 2) 
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation 

end sub 

別EDIT

あなたは、各チャンクを実行するのにかかるどのくらい見るためにあなたのコードを散発のDebug.Printラインを埋めることができます。

関連する問題