忍者ブログ
とりあえずメモるところ
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

高速化、というよりやってて当たり前、という話。

Findについてわからない人はこちらへどうぞ。

以下、テキトーなコード。

Dim objCells As Object
.
.

Set objCells =Worksheets("Sheet1").Cells.Find(What:="検索する値",After:=Cells(2,2),lookat:=xlWhole, _
            SearchOrder:=xlByColumns)

.
.


  考えてみればわかるのだが、太字の設定を忘れていると検索にやたらと時間がかかる可能性がある。Afterは検索の開始位置、SearchOrderは検索の方向だ。xlByColumnsが行方向、xlByRowsが列方向なので注意。たとえば、特定の行に対して文字列を検索するときはxlByRowsにすれば列に対して検索をしてくれるので動作がスムーズである。検索対象のデータがB列以降にある可能性が高い場合はAfterでCells(x,2)などを指定するとそこから検索してくれるので処理が速くなる。

  こういう事があるので、省略値はあるにせよコーディングの際はオプションの値を明確にしておいたほうが良いだろう。かといって全部書くのは煩雑だし面倒だ。個人的には、少なくとも上記のコーディングにあるオプションは明確にしておいたほうが良いと思う。
PR
VBA‐これでアプリケーションを作らなければならない仕事がある場合を除けば、普段の仕事で覚える優先順位は低い。けど覚えておく事に越した事は無い。

VBAでマクロの記録に頼ったり、いい加減に作っていると、いざツールを動かした時に処理が遅いと感じる事がある。

マクロの記録だと、例えばセルに色付けをする時にセルを選択してから色付けするので、

Range("A1").Select

With Selection.Interior
     .ColorIndex = 12
End With

こんな感じになる。
しかし、これを使ってたくさんのセルに色付けするマクロを作ったとすると、

色をつけるその都度Selectがかかるので効率が全く良くない。

この場合は
Range("A1").Interior.ColorIndex = 12
のようにすればSelectしなくて済むので速くなる。

と、思っていたら、こちら(http://officetanaka.net/excel/vba/speed/s2.htm)で検証が既になされていた(汗


忍者ブログ [PR]
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新コメント
最新記事
最新トラックバック
プロフィール
HN:
No Name Ninja
性別:
非公開
バーコード
ブログ内検索
広告