• ベストアンサー

Excel VBAにて

Activate と Select は通常、どう使い分けるものでしょうか? いまいち、使い分けが理解できません。 ご経験者の方々、知識ある方 アドバイス・ご意見を頂ければ助かります。 宜しくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

> Windows("第6章.xlsm:2").Activate ウィンドウはそもそも選択できませんから、  Activate メソッド しか用意されてません。 どんなオブジェクトでも共通するメソッドがあるのではなくて 似たような処理をする(言葉にすれば同じことをする)メソッドに 同じ名前が付いている。と考えた方が良いです。 私は、解りやすくするために、説明の為に、.Select は選択、と端的な書き方をしました。 それから、もうひとつのスレにも、同趣旨のことを書きましたが、 本で勉強するなら、その本が導くままに一度最後まで進めた方が良いと思います。 途中で質問すると、却って混乱してしまうかも知れませんから。 例えば、円周率を3、ということにして簡単な説明をしようとしているテキストがあったとして それを読んだ人が、「円周率は3ですか?」と質問掲示板で質問したところで ご本人は混乱するだけだと思います。 何が悪いとかそういう話じゃなくて、教わるなら、 ひとりに(ひとつの教え方で)教わった方が初学の場合は成功しやすい という意味です。

this_love
質問者

お礼

早速のご回答ありがとうございます。 > Windows("第6章.xlsm:2").Activate ウィンドウはそもそも選択できませんから、  Activate メソッド しか用意されてません。 確かに、Selectに変えたところエラーになりました。 ようやく理解できました。 ご回答者さんの言われる案も一つの道だと考えさせられました。 まずは全部終わらせてから、質問したいと思います。 ただもう終わるところで、焦りが出てきたのかも知れません。 以後気を付けます。 大変、勉強になりました。 有難うございます。

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

その他の回答 (5)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.6

極々簡単に覚えるなら Activate⇒とりあえず、表示させたい時 Select⇒選択して、その後に何らかの処理をしたい時 くらいで(私は)困ってなかったりします。 慣れてくると、Selectすらもあまり使わなくなったりしますけど・・  Range("A1:A5").Select  Selection.copy      ↓  Range("A1:A5").copy ってな具合。 まぁ、こればかりは好みですから^^;

this_love
質問者

お礼

ご回答ありがとうございます。 Activate⇒とりあえず、表示させたい時 Select⇒選択して、その後に何らかの処理をしたい時 大変、砕いた説明文に助かります。 良い勉強になりました。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

ひとつだけ選択する場合でも、 選択したいときは、.Selectメソッドを使うべきです。 理由は#2に挙げた失敗し易い例がある為です。 参考書や、下手するとマクロの記録でさえも .Activeteを優先させる嫌いがありますが、 実際、選択するメソッドは、ただひとつ、.Select だけです。 使い分けが難しいなら、尚のこと、選択は.Select とおぼえてください。

this_love
質問者

補足

再度、ご回答ありがとうございます。 こちらが教本の内容の一部なのですが、 ここでの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

全文を見る
すると、全ての回答が全文表示されます。
noname#235729
noname#235729
回答No.3

 SelectさんちのActivate君という感じですかね。ちょっと説明が難しいんですが(^_^;  Selectというのはひと塊を選択するもので、Activateは単品にスポットを当てるというものです。  複数セルをドラッグして選択したときに、左上のセルだけ白くなっているのに気づいてませんか?  あの白いのがActivate状態。  この状態で試しにTabやEnterを押すと、白いセルが移動すると思います。これがActivateセルを選択しなおしてる状態。  この移動もSelectの範囲内でしか行われませんよね。  だから本来の使い分けは、複数を対象にする場合はSelect、一つだけ選択したい場合はActivateというのが正しいです。  まあ、社長も従業員も自分一人の会社なら、会社を選んでもその人を呼ぶことになるというのと同じで、一つのセルとかを選ぶ場合はどちらでも使えますよという形ですね。

this_love
質問者

お礼

とても分かりやすい説明ありがとうございます。 初歩の初歩レベルの私は選択=Selectと覚えていたのですが 教本でActivateが出てきてしまい、混乱している状態です。 再度詳しくご相談させていただきたいので 補足・又は新規相談として投稿しようと思います。 ありがとうございます。 また単品・複数と覚えるのが基本とのこと、勉強になります。

this_love
質問者

補足

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)
回答No.2

こんにちは。 .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

this_love
質問者

お礼

ご回答有難うございます。 せっかく失敗例まで記載していただいのですが 私のレベルが低いのでまだ追いつきません。 また私もSELECTは選択で覚えていた矢先に、教本でActivateが出てきてしまい ?の状況でした。 >Activate メソッドは、基本的に  選択された複数オブジェクトの中でアクティブにしたいものを指定して  ActiveObjを移動(変更)するメソッドです。 とても芯をついたご説明ありがとうございます。 もう少し頭を整理したいと思います。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

セルを1つ選択する場合であれば、どちらでも良かったと思います。 ただ、セルを同時に2つ以上選択する場合は、Selectしか出来ないです。 (シートも同じかな) 私は基本的にActivateで、複数セル選択時はSelectを使ってました。

this_love
質問者

お礼

早速のご回答ありがとうございます。 大変、簡単でわかりやすい覚え方だと思います。 有難うございました。参考になります。

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

関連するQ&A

  • Excel VBAにて

    Msgboxの()の使い分けを教えてください。 かっこが必要な時、不要な時の区別がわかりません。 経験者の方々、知識ある方 アドバイスやご意見を頂ければ助かります。 よろしくお願いします。

  • Excel VBAにて

    FormulaR1C1の用途、または意味が分かりません。 ご経験者の方々、知識ある方の ご意見・アドバイスを頂ければ助かります。 よろしくお願いします。

  • VBAにて

    初歩的な質問になりますが 下記の件で教えていただきたく投稿しました。 ご経験者、知識ある方々の知恵やアドバイスを頂ければ幸いです。 AとBは仮です (1) A=B と、A:=Bはどう違い、どのように使い分けするのでしょうか? (2) Value<>"" は、どういう意味なのでしょうか? よろしくお願いします。   

  • VBAにて

    質問です。 あるセルの色が指定色だった場合、あるセルの値を指定のセルに代入するVBAを 作りたいのですが、わかりません。 ご経験者、知識ある方々のご意見やアドバイスを お願いします。

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

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

  • ExcelのVBAでシートを直接Selectする方法

    次のようなVBAがあります。 For intAge = 6 To 11  Range(strBase & intAge).Select  Selection.Copy  Windows(strMasterName).Activate  Sheets(strBase).Select  Range(strBase & intAge & "_" & strNo).Select  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, Blanks:= _   False, Transpose:=False  Windows(strFileName).Activate  Sheets(strBase).Select Next intAge 2つのファイルを開いていて、1つのファイルから別のファイルにデータを連続してコピーしています。 WindowsをActivateして、SheetsをSelectしてからRangeをSelectしているのですが、 直接、WindowsのSheetsのRangeをSelectする方法はないのでしょうか? Windows(strFileName).Sheets(strBase).Range(strBase & intAge).Select としたらエラーが発生してダメでした。 わかる方いらっしゃいましたら、よろしくお願いいたします。 (これで十分動いているのですが、もう少し、簡潔な文にしたいのです)

  • VBA 他のエクセルファイルデータを読み込む

    エクセルのVBAに関する質問です。 かじった程度の知識でがんばってはみたのですが、以下のことがどうしてもできません。 集計ファイルと、それぞれが入力するファイルがいくつか(具体的には1A.xls、1B.xls、2A.xls、2B.xlsといった数字とアルファベットの組み合わせ)あります。 入力ファイルに書かれているデータを集計ファイルに取り込もうと考えています。 入力ファイル名が(1.xls,2.xls・・・)の様に数字だけの取り込みはできました。 m = Val(UserForm2.TextBox1.Text) For i = 1 To m On Error GoTo myError Workbooks.Open Filename:="C:" & i & ".xls", UpdateLinks:=0 Range("f65536").End(xlUp).Activate Workbooks(i & ".xls").Activate Sheets("入力ファイル").Select Range("A3:X52").Select Application.CutCopyMode = False Selection.Copy Workbooks("集計ファイル.xls").Activate Sheets("DB").Activate Range("a65536").End(xlUp).Activate Selection.Offset(1).Select ActiveSheet.Paste Range("a65536").End(xlUp).Select   Workbooks(i & ".xls").Close SaveChanges:=False myError: Next i Application.DisplayAlerts = True こんな感じです。 これを、数字だけでなく数字+アルファベット.xlsのファイル名にしてデータを取り込むにはどうすればいいのでしょうか?色々と試行錯誤をしたり、ネットで調べたりしたのですが、詰んでしまいました。 どなたかお助け下さい。

  • VBA作製ができません。どなたか教えてください。

    前回同じタイトルで質問させていただいた物を自分なりに本で調べて 作ってみました。しかし壁にぶつかりました。 Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select この式は7列目の一番下の空欄のセルを選択できる式のようですが、 指定した範囲のなかで7列目の一番下のセルを選択したいのですがどうすればいいでしょうか? つまり列だけじゃなく行も選択したいです。 教えてください。 こんな式を作りました。  もし式を簡単に効率よくできる方法があればアドバイス下さい。 If Range("G4").Value = SpecialCells Then Range("H4").Select Else Range("G4").Select Range("G4").Copy Windows("Book1.xlsx").Activate Range("G18:G26") = Selection.Areas.Count Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("D4").Select Range("D4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 4).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("E4").Select Range("E4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 5).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("H4").Select End If

  • Excel VBA の基本画面にて

    昨日、コードウィンドウやプロジェクトエクスプローラ、プロパティウィンドウを 間違えて非表示にしてしまい、再表示して新たに勉強しているのですが 最初の固定画面にならず、何度も画面を操作しなければなりません。 元の画面を固定する方法はありませんでしょうか? (元の画面:参考に添付します) 経験者の方々、知識のある方 ご意見、アドバイス等を宜しくお願いします。 余談ですが コードを記入しては、 保存せずに再度EXCEL開いてはコードを入力する暗記方法で勉強しています。

  • エクセルVBAでの質問です。

    まとめ.xlsに、「まとめ」「グラフ」「A」「B」「C」「D」「E」というシートがあって、それと一緒に、A.xls、B.xls、C.xls、D.xls、E.xlsというファイルを開いた際に、A.xlsの、G2:I54をまとめ.xlsのAのシートのA1に、B.xlsの、G2:I54をまとめ.xlsのBのシートのA1に・・・といった感じでコピーを行いたいと思い、以下のようにマクロを組みました。 Dim I(4) As String I(0) = "A" I(1) = "B" I(2) = "C" I(3) = "D" I(4) = "E" Sheets("まとめ").Select For J = 0 To 4 Step 1 Sheets("" + I(J) + "").Select Windows("" + I(J) + ".xls").Activate Range("G2:I54").Select Selection.Copy ThisWorkbook.Activate Range("A1").Select ActiveSheet.Paste Application.CutCopyMode = False Workbooks("" + I(J) + ".xls").Close SaveChanges:=False Next J ThisWorkbook.Activate Sheets("まとめ").Select Range("A1").Select この状態では、必ずA~Eのシートと、A~E.xlsが存在しないと処理できないのですが、情報量が変わった場合でも同じような処理を行いたいのです。 たとえば、A~CのシートとA~C.xlsしかない場合、 アルファベットではなく、1~3といった場合、 5枚だけではなく、10枚など増えた場合。 まとめ.xlsの「まとめ」と、「グラフ」のシートには、それぞれA~Eに貼られたデータから引用したり、グラフ化したりしているため、シートの入れ替えは行うことができず、純粋に、「値のコピー」としてもってきたいと思っています。 原則として、A~Eのシートに貼り付けるA~E.xlsに存在するシート名は、A.xlsはA、B.xlsはB・・・といった感じになっています。 それが数字になっても、文字になってもその規則に変更はありません。 分かりにくい説明ですみません。 分かる方、よろしくお願いします。

このQ&Aのポイント
  • B’sレコーダーが良いと思うが、実際に聞いてみないと分からない。電話で聞いて確かめたい
  • ダウンロード版ではなく、実際の箱に入ったソフトが欲しい。メールでは勘違いが多いため、電話で聞きたい
  • 録画してある画像をDVDにダビングするソフトを探している。具体的な製品を教えて欲しい
回答を見る

専門家に質問してみよう