• ベストアンサー

VBA(EXCEL2003)におけるselect,activateメソッドの違い

EXCEL2003でVBAを独習中です。どうもselectとactivateの違いをなかなか理解できません。 例えば sheets("sheet1").select と sheets("sheet1").activateの違いは何かということがわかりません。 まして activesheet.activate などと書かれていると、何でアクティブなシートをアクティブにしなければならないのだ?と思ってしまいます。 VBAに関しては、数回目の初心者ですので、何でも言ってください。

質問者が選んだベストアンサー

  • ベストアンサー
  • 221west
  • ベストアンサー率36% (168/459)
回答No.2

シンプルに言うと、 セルをクリックしたままマウスをドラッグさせると、ドラッグさせた範囲は薄いブルーになりますよね(元が白いセルなら)、そこがセレクトされた範囲です。 しかしながら、最初にクリックしたセルだけは色が変わってないですよね、そこがアクティブです。 セル以外に、シートでもCtrlやShiftを押しながら複数選べますよね、同様です。

yoo00666
質問者

お礼

非常に解りやすく、参考になりました。 アドバイスを印刷してモニタの横に貼りました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

例えば、「書式」-「シート」-「表示しない」で一番左のシートを非表示にしたとします。 Sub Test1()   Worksheets(1).Activate   ActiveSheet.Range("A1").Value = Now End Sub Sub Test2()   Worksheets(1).Select   ActiveSheet.Range("A1").Value = Now End Sub その場合、Test1は動くけどTest2はエラーになります。 非表示シートは Active に出来るけど Select は出来ないようです。 選択(Select)しなくても Activeにすれば良いので、私はExcelVBAの記述で Select する必要はあまり無いと思っています。 マクロ記録は Select 多用ですが、、 > activesheet.activate などと書かれていると、 Excel97時代に、Activecell.Activate は良く使いました。 Excel97はシートに置いた CommandButton の Click処理ではこの記述を入れないとアクティブセルを見失う?(バグ?)事があったので。 でも activesheet.activate はあまり聞かないですね。

yoo00666
質問者

お礼

ご回答ありがとうございました。 私には、まだ難しいな。 また、activesheets.activate の件、これから悩まないですみそうです。そんなに古い参考書でもないのにな。

すると、全ての回答が全文表示されます。
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

Sheetの場合は同じですね。 Rangeの場合ならActivateは単一セル、Selectは範囲です。 Sub MACRO1() ActiveSheet.Range("A1:A10").Select ActiveSheet.Range("A10").Activate End Sub 上記なら、A1:A10を選択後に、選択はそのままでA10にカーソルが移動します。

yoo00666
質問者

お礼

ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 Activate も Select も、ほぼ同じです。 ただ、Activate というのは、一つを選ぶ行為ですが、Select は、数に関係がなく選ぶことです。 >sheets("sheet1").select と sheets("sheet1").activateの違い これに関しては、違いがありません。 > activesheet.activate などと書かれていると、 これは、知りません。ありえないわけではないけれど、ナンセンスです。 サンプル: Sub Test1()  Sheets.Select  Sheet2.Activate End Sub ' Sub Test1a() '選択した数を調べる  Sheets.Select  MsgBox ActiveWindow.SelectedSheets.Count  Sheet2.Activate  MsgBox ActiveWindow.SelectedSheets.Count End Sub ' Sub Test2() 'こちらは動かない。Activate は、複数を選択することが出来ません。  Sheets.Activate 'エラー発生  Sheet2.Select End Sub 'こんなこともありえます。 Sub Test3() Dim i As Integer Worksheets(1).Select '初期シートを洗濯 For i = 1 To Worksheets.Count  If i Mod 2 = 1 Then '奇数のシートだけ選ぶ   Worksheets(i).Select False  End If Next i End Sub なお、私だけかもしれませんが、こういうのは、1年経っても、2年経っても納得の行く説明が出来るようにはなりません。現象としては、捕らえることが出来ても、その都度、英語単語のように比較して覚えるようなことは辞めたほうがよいです。ややこしくなるだけです。 他にも、Cells と Range や、Sheet と Worksheet、Window と Workbook など、好みで選べることは出来ないにしても、頻度や使い分けの違いがあります。そして、当然、覚えるほうにも優先順位があります。もちろん、上達するにしたがって使い分けもありますが、入門編から、それを比較していったら、到底先には進めません。今回の場合は、Activate は忘れて、Select だけで、先に進んでください。知ったかぶりであれこれと書いても、自分が納得しないものを他人には通じないように思います。 なお、Activate は、実務上で必須になることがありますが、そういうことが出てくるのは、3年か4年先だと思っていいです。入門レベルでは、そういうのがあるなっていう程度で十分です。

yoo00666
質問者

お礼

ありがとうございます。 昨夜から、手元にある例文で、select と activate を入れ変えながらいろいろ試しています。 activateを頭の片隅に置き、selectでがんがん行こうと思います。

すると、全ての回答が全文表示されます。

関連するQ&A