|
▼ペンネーム船長 さん:
>でも、なぜ、始めの私のコードではシートをSelect出来なかったのでしょうか。
逆にお尋ねしますが、コードのどこでシートをSelectしていますか?
以下、想像で書きます。違っていたら失礼。
For Each sh In Worksheets
sh.Cells(1,1).Value = 1
Next
というコードがあったとき、
「人間がそれを手作業でやる」イメージを持たれていませんか?
まず、最初のシートを開いて、
そのA1セルに、1を入れる。
次に、2番目のシートを開いて・・・
人間がやるなら、シートを次々に開いていかないと、セルに入力できません。
しかし、それはとても無駄なわけです。
選択しなくても、
sh.Cells(1,1).Value = 1
で可能なんです。可能だし、そうすべきなんです。
しかも、うっかり
For Each sh In Worksheets
sh.Cells(1,1).Select
Selection.Value = 1
Next
と書いてしまったら、そこでアウト。ゲームセット。それはエラーになるのです。
理由はもうおわかりでしょう。
------------------------------------
「VBA高速化テクニック」
ht tp://officetanaka.net/excel/vba/speed/index.htm
のなかの
「無駄なSelectをしない 」
ht tp://officetanaka.net/excel/vba/speed/s2.htm
を参考にして下さい。
「VBA高速化テクニック」も熟読されるとよいでしょう。
そこでは主として処理速度に重点を置いて書かれていますが、
可読性の向上の観点からも、「Selectするな」が推奨されます。
例外的な場合を除いて、Selectを使う必要はありません。
書いたらエラーになることが多い。
今回と、 【76344】取り消し線が引けない(14/11/1(土) 21:29 )
がその例です。
百害あって一利なし、です。
ベテランさんのようにお見受けしますので、
Selectを簡単に使ってしまう癖から、
早く卒業していただきたいと思います。
# 失礼がありましたら、お許し願います。
|
|