Excel最終行取得前にCtrl+Downで高速化
Excelのライブラリで最終行を取得する前に、Ctrl+Downしておくとハッピーになれるという情報です。
このへんの流れで、速度が気になって検証しました。
https://winactor.com/questions/?q=Excel操作 (最終行取得%20その1234)を一本化してみた
◆
◆ テスト
◆
ファイルの概要
- 1048560.xlsx(200MB)
- 入力内容 =CELL(\"address\",A1)
- 入力範囲 A1:Z1048560
- ローカル保存
- 開くのに1分59秒、上書き保存に1分48秒かかる環境
- 再計算の設定は完全に手動にしてある
パーツ構成
- 最終行取得
- 待機ボックス:最終行
最終行取得その1~4の設定
- シート名:空欄
- (開始行:1)
- (開始列:A)
実行結果
- いずれも1048560の取得に成功
所要時間
- その1:2秒
- その2:計測断念(30分強放置しても完了せず)
- 最終行を1万行にしたら50秒だった
- 開始行を1040000にしたら、きっと50秒未満だったはず
- その2を使うなら、開始行を工夫したい
- その3:10秒
- その4:2秒
メモ
- 所要時間の差は、しくみの差と解釈するのが自然っぽい
- その134は、しくみを考慮して、予めカーソルを最終行に置いた状態で実行
- カーソルがセルA1のままだと、もっともっと時間がかかった
- 2はセルA1から探し始めるので、途方もなく時間がかかる
◆
◆ まとめ
◆
検証を活かしたパーツ構成
- エミュレーション:Ctrl+Down(その1ならCtrl+End)
- 最終行取得
その1~4の選定方針(感覚だけの目安)
- 対象範囲の状態のバリエーションを踏まえても同じ結果が得られるなら、最もフィットするしくみのライブラリ(≒軽い≒速い)を選定したい
- Ctrl+Endの行を得たいならその1
- 開始行が中途半端な位置ならその2(1000行レベルの範囲ならこれか)
- 開始行はダイタンに指定したい
- 行1始まりならその3
- 最大行1048576に近いならその4(5000行を超えてくるとこれか)
- 重いファイルを扱うなら、対象範囲でCtrl+Downしておきたい
対象範囲の状態のバリエーションの例
No.8 ワークシートの最終行、最終列を取得する
http://www.niji.or.jp/home/toru/notes/8.html
検証の副産物
テスト用ファイルを作る過程で、手法によってパフォーマンスに大きな差が出ることを実感しました。
- A1:Z1をA2:A1048560にペースト → まずまずの重さ(処理に見合った負荷)
- オートフィル → 激重(処理に見合わない負荷)
同じ結果が得られる処理は、1行ずつの繰り返しより一括処理が効率的の典型例と解釈できそうです。
関連スレッド
https://winactor.com/questions/question/excel操作autofillを拡張してみた/
anothersolution 新しいコメントを投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。
新規登録