| 
    
     |  | ▼ペンネーム船長 さん: >でも、なぜ、始めの私のコードではシートを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を簡単に使ってしまう癖から、
 早く卒業していただきたいと思います。
 
 # 失礼がありましたら、お許し願います。
 
 
 |  |