- ベストアンサー
Excel VBAにて
Activate と Select は通常、どう使い分けるものでしょうか? いまいち、使い分けが理解できません。 ご経験者の方々、知識ある方 アドバイス・ご意見を頂ければ助かります。 宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> Windows("第6章.xlsm:2").Activate ウィンドウはそもそも選択できませんから、 Activate メソッド しか用意されてません。 どんなオブジェクトでも共通するメソッドがあるのではなくて 似たような処理をする(言葉にすれば同じことをする)メソッドに 同じ名前が付いている。と考えた方が良いです。 私は、解りやすくするために、説明の為に、.Select は選択、と端的な書き方をしました。 それから、もうひとつのスレにも、同趣旨のことを書きましたが、 本で勉強するなら、その本が導くままに一度最後まで進めた方が良いと思います。 途中で質問すると、却って混乱してしまうかも知れませんから。 例えば、円周率を3、ということにして簡単な説明をしようとしているテキストがあったとして それを読んだ人が、「円周率は3ですか?」と質問掲示板で質問したところで ご本人は混乱するだけだと思います。 何が悪いとかそういう話じゃなくて、教わるなら、 ひとりに(ひとつの教え方で)教わった方が初学の場合は成功しやすい という意味です。
その他の回答 (5)
- tsubuyuki
- ベストアンサー率45% (699/1545)
極々簡単に覚えるなら Activate⇒とりあえず、表示させたい時 Select⇒選択して、その後に何らかの処理をしたい時 くらいで(私は)困ってなかったりします。 慣れてくると、Selectすらもあまり使わなくなったりしますけど・・ Range("A1:A5").Select Selection.copy ↓ Range("A1:A5").copy ってな具合。 まぁ、こればかりは好みですから^^;
お礼
ご回答ありがとうございます。 Activate⇒とりあえず、表示させたい時 Select⇒選択して、その後に何らかの処理をしたい時 大変、砕いた説明文に助かります。 良い勉強になりました。 ありがとうございます。
- cj_mover
- ベストアンサー率76% (292/381)
ひとつだけ選択する場合でも、 選択したいときは、.Selectメソッドを使うべきです。 理由は#2に挙げた失敗し易い例がある為です。 参考書や、下手するとマクロの記録でさえも .Activeteを優先させる嫌いがありますが、 実際、選択するメソッドは、ただひとつ、.Select だけです。 使い分けが難しいなら、尚のこと、選択は.Select とおぼえてください。
補足
再度、ご回答ありがとうございます。 こちらが教本の内容の一部なのですが、 ここでのActivateは(複数でもないのに)なぜなのでしょうか? また、ActivateをSelectに変更するのもありなのでしょうか? お手数おかけしますがご回答頂ければ助かります。 ActiveWindow.NewWindow ActiveWindow.NewWindow Windows.Arrange xlArrangeStyleTiled Windows("第6章.xlsm:2").Activate Worksheets("得意先リスト").Select Windows("第6章.xlsm:1").Activate Worksheets("商品リスト").Select Windows("第6章.xlsm:3").Activate
SelectさんちのActivate君という感じですかね。ちょっと説明が難しいんですが(^_^; Selectというのはひと塊を選択するもので、Activateは単品にスポットを当てるというものです。 複数セルをドラッグして選択したときに、左上のセルだけ白くなっているのに気づいてませんか? あの白いのがActivate状態。 この状態で試しにTabやEnterを押すと、白いセルが移動すると思います。これがActivateセルを選択しなおしてる状態。 この移動もSelectの範囲内でしか行われませんよね。 だから本来の使い分けは、複数を対象にする場合はSelect、一つだけ選択したい場合はActivateというのが正しいです。 まあ、社長も従業員も自分一人の会社なら、会社を選んでもその人を呼ぶことになるというのと同じで、一つのセルとかを選ぶ場合はどちらでも使えますよという形ですね。
お礼
とても分かりやすい説明ありがとうございます。 初歩の初歩レベルの私は選択=Selectと覚えていたのですが 教本でActivateが出てきてしまい、混乱している状態です。 再度詳しくご相談させていただきたいので 補足・又は新規相談として投稿しようと思います。 ありがとうございます。 また単品・複数と覚えるのが基本とのこと、勉強になります。
補足
ActiveWindow.NewWindow ActiveWindow.NewWindow Windows.Arrange xlArrangeStyleTiled Windows("第6章.xlsm:2").Activate Worksheets("得意先リスト").Select Windows("第6章.xlsm:1").Activate Worksheets("商品リスト").Select Windows("第6章.xlsm:3").Activate こちらが教本の内容の一部なのですが、 ここでのActivateは(単品でもないのに)なぜなのでしょうか? お手数おかけしますがご回答頂ければ助かります。
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 .Select メソッドについては、普通に日本語として"選択する"と覚えていて差し支えありません。 .Activate メソッドは、基本的に 選択された複数オブジェクトの中でアクティブにしたいものを指定して ActiveObjを移動(変更)するメソッドです。 但し、.Activate メソッドで指定したオブジェクトが選択中でない場合だけ .Select メソッドと同じ挙動を示します。 失敗し易い例を2例挙げておきます。 Sub Re7740084_Range() Range("B2:E5").Select MsgBox "Range(""B2:E5"").Select を実行しました" Range("B2").Activate MsgBox "Range(""B2"").Activate を実行しました" Range("E5").Activate MsgBox "Range(""E5"").Activate を実行しました" End Sub Sub Re7740084_Sheets() Worksheets(Array(1, 2)).Select MsgBox "Worksheets(Array(1, 2)).Selectt を実行しました" & vbLf _ & "選択中のシート数 は " & ActiveWindow.SelectedSheets.Count Worksheets(2).Activate MsgBox "Worksheets(2).Activate を実行しました" & vbLf _ & "選択中のシート数 は " & ActiveWindow.SelectedSheets.Count End Sub
お礼
ご回答有難うございます。 せっかく失敗例まで記載していただいのですが 私のレベルが低いのでまだ追いつきません。 また私もSELECTは選択で覚えていた矢先に、教本でActivateが出てきてしまい ?の状況でした。 >Activate メソッドは、基本的に 選択された複数オブジェクトの中でアクティブにしたいものを指定して ActiveObjを移動(変更)するメソッドです。 とても芯をついたご説明ありがとうございます。 もう少し頭を整理したいと思います。 助かりました。
- aihara003
- ベストアンサー率0% (0/4)
セルを1つ選択する場合であれば、どちらでも良かったと思います。 ただ、セルを同時に2つ以上選択する場合は、Selectしか出来ないです。 (シートも同じかな) 私は基本的にActivateで、複数セル選択時はSelectを使ってました。
お礼
早速のご回答ありがとうございます。 大変、簡単でわかりやすい覚え方だと思います。 有難うございました。参考になります。
お礼
早速のご回答ありがとうございます。 > Windows("第6章.xlsm:2").Activate ウィンドウはそもそも選択できませんから、 Activate メソッド しか用意されてません。 確かに、Selectに変えたところエラーになりました。 ようやく理解できました。 ご回答者さんの言われる案も一つの道だと考えさせられました。 まずは全部終わらせてから、質問したいと思います。 ただもう終わるところで、焦りが出てきたのかも知れません。 以後気を付けます。 大変、勉強になりました。 有難うございます。