2018-02-01
ExcelVBA覚書 Transport関数をうまく使う
SQLを実行してきてデータを取得するまではよいのだが、その後シート上に出力するときに異様に時間がかかる場合がある。
で、端末個体の理由は置いといて、複数のワークブックを開けていた場合に起こるのであれば、対策は、
処理中は必要なとき以外「自動計算」させない!
ということらしい。
With Application .ScreenUpdating = False .Calculation =xlCalculationManual .EnableEvents = False End With
としておけば、
画面を更新せず、
再計算させず、
イベント有効にしない
とできるわけである。
これで、余計なイベントも発生しないので良いのだが、再計算してほしいときにはCaluculateメソッドを発行しておかねばならない。
で、Application.Calculation = xlCalculationManualをせず、シート上にバサッと出力したいなぁ~などと思っていたら、
WorksheetFunction.Transpose()
シート関数のTRANSPORT関数を使って、引数に出力したい配列を設定することで、ドバっとあっという間に出力できてしまうやり方を紹介しているページがあったので、ありがたやありがたやとやってみたところ、本当にあっさりとドバっと出力された。
参考URL:エクセルの神髄「マクロVBAの高速化・速度対策の具体的手順と検証」
入れる配列は(横、縦)の状態にして、Transport関数で縦横逆にして出力!ってなことになっている。
ありがたやありがたや!