一般社団法人 全国個人事業主支援協会

COLUMN コラム

こんにちは。
田中です。

データ用のブックを読み込み、データを精査したものを新しいブックやシートに保存。
なんて割とよく動作だと思うが、メモ代わりに記載する。

そこでこれまで記載していたのが以下のプログラム。

For i = 0 To UBound(Number)
 ActiveCell.Value = Number(i)
 ActiveCell.Offset(1).Select
Next

解説:A1を選択、値を入れたら下のセルを選択しなおして値を入れていく。その繰り返し。
デバッグ時には選択されている状態なので目で追いやすい。

ただ、「Application.ScreenUpdating」を入れないと処理速度にかなり差があり、1万、5万とデータ量が増えると結構重くなってしまう…
とあるマクロを上の記述で動かしたら10分以上かかってしまった…
デバッグしてみると読み込みは一瞬なのに、書き込みでかなり時間がかかってしまっているよ。

それでなんとか軽くできないかといろいろサイトを探してみた結果行き着いたのは、Cellsを使うということ。

そんなわけで以下のように手直し。

For i = 0 To UBound(Number)
 Cells(1, i+1) = Number(i)
Next

Cellsに+1しているのはCells(0,0)なんて存在しないため。※A1=Cells(1,1)になる
数行程度では差なんてわからないけれども、これに書き直したら、処理時間が10分が2分に!
あまりの早さに「早くなった!」と感動してしまい、でかい独り言が出てしまった 😆

体感での話になってしまいましたが、実際に何がどうどれだけ早いのか、時間比較されているサイトもあります。
なぜそうなのかと興味ある方は調べてみてください。
ここではあくまで、こんな書き方があるぐらいです。

The following two tabs change content below.

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア