こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2006-10-31 20:56:11

QNo.2509715

暇なときに回答ください

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

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

投稿日時 - 2006-10-31 21:45:18

お礼

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

投稿日時 - 2006-11-01 13:22:57

ANo.2

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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 はあまり聞かないですね。

投稿日時 - 2006-10-31 23:52:55

お礼

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

投稿日時 - 2006-11-01 13:38:38

ANo.3

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

投稿日時 - 2006-10-31 22:03:05

お礼

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

投稿日時 - 2006-11-01 13:30:45

ANo.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年先だと思っていいです。入門レベルでは、そういうのがあるなっていう程度で十分です。

投稿日時 - 2006-10-31 21:38:13

お礼

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

投稿日時 - 2006-11-01 13:19:06

あなたにオススメの質問