Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5953 / 76732 ←次へ | 前へ→

【76383】Re:[無題]
回答  γ  - 14/11/12(水) 6:13 -

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

# 失礼がありましたら、お許し願います。
1 hits

【76375】[無題] ペンネーム船長 14/11/9(日) 23:57 質問[未読]
【76376】Re:[無題] γ 14/11/10(月) 0:10 発言[未読]
【76377】Re:[無題] γ 14/11/10(月) 7:06 発言[未読]
【76381】Re:[無題] γ 14/11/11(火) 22:38 発言[未読]
【76382】Re:[無題] ペンネーム船長 14/11/12(水) 0:15 発言[未読]
【76383】Re:[無題] γ 14/11/12(水) 6:13 回答[未読]
【76390】Re:[無題] ペンネーム船長 14/11/14(金) 0:11 お礼[未読]

5953 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free