2017-08-08 14 views
1

実績レポートとしてExcelファイルに46列の12,000レコードを書いています。ワークシートは、データで満たされている間は表示されません。すぐにExcelオブジェクトを使用して数値書式を設定する

前のStackOverflowの情報では、オブジェクトの配列を使用して速度の範囲で値を配置する方法を教えてくれました。私はこれが値の書式設定にも役立つことを期待していました。

コードスニップ:

objExcel.Calculation = XlCalculation.xlCalculationManual 
objExcel.ScreenUpdating = False 

dcel = objWS.Range(objWS.Cells(rowdatastart, 1), objWS.Cells(rowdataend, nProdReportCol.ProdReportColCount - 2)) 

dcel.Value = aobj 

dcel.NumberFormat = bobj 

objExcel.ScreenUpdating = True 
objExcel.Calculation = XlCalculation.xlCalculationAutomatic 

AOBJとBOBJ範囲に収まるオブジェクト(、)アレイです。 bobjには、時間を「12:23a」と表示する「h:mma/p」や数字を「53/25」と表示する「0.00」などの文字列が含まれています。

"dcel.value = aobj"には0.5秒かかります。 "dcel.NumberFormat = bobj"は38秒かかります。

私が逃したことや誤解されたことに関する提案はありますか?私が選択したときに数字/日付/時刻が表示されるようにするために、私はむしろ7秒のレポート(Excelの開始、書き出し、保存、終了が優れています)を45秒かかるとは思いません。

+0

フォーマットでは機能しません。おそらく、特定の 'bobj'フォーマットを必要とするすべてのセルを一度にフォーマットできるように、範囲オブジェクトを作成することができます。条件付き書式設定を使用して範囲全体を一度に設定することもできます。あなたのコードが動作しているので、これは[Code Review](https://codereview.stackexchange.com/)に最適かもしれません。 –

答えて

0

各列に独自の書式がある場合は、列全体を書式設定してみてください。また、列ごとに配列を使用しないでください。形式が同一であれば、単一の文字列を使用できます。

各列に対して同様にします。

フィードバックを送信してください。

0

もう少し実験をした後、私はS Meadenと同じ解決策を見つけました。 46列のうちの14列だけが「一般」ではないため、日付、時刻、および2桁の10進数の列番号を収集しました。これらのそれぞれをループして、12000レコードの範囲と1列のフォーマットを設定します。これはすべての列に対して約0.5秒かかります。

46個のオブジェクト配列を使用する46個のセルの行を設定すると、列内の12000個のセルよりもはるかに長い時間がかかりますが、そこにはあります。

ありがとうございました。

関連する問題