• ベストアンサー

EXCELのVBAでのSelectとActivateの違い

VBAの初心者です。 ExcelのVBAでメッセージを表示してシートを切換えるというのを作りたいのです。 見真似で作成したのが↓です。 Dim rtn As String rtn = MsgBox("シートを切換えますか", vbYesNo, "シートの切替") If rtn = vbYes Then Worksheets("送付先一覧").Activate Range("a1").Select Else Exit Sub End If 動作確認はできましたが、上記の「Activate」を「Select」に変更しても特に動作異常がありません。 そこで、疑問ですが、「Activate」と「Select」ってどうやって使い分けるのでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 通常は、シートもセルも Select でよいと思います。 選択して、扱えるようにするということだと思います。 #2さんも述べておりますが、Activate って、ひとつを選ぶことですね。でも、なぜか、Activate は、ほとんど使いません。 たぶん、Select は、選択した後に、その選択したものを、そのままオブジェクトとして確保して使えるので便利だから選ばれるのかもしれません。 Select → Selection として使えます。

kuwong
質問者

お礼

ありがとうございます。とても分かりやすい説明でした。<m(__)m> これからもいろいろ教えてくださいm(__)m

その他の回答 (2)

noname#79209
noname#79209
回答No.2

Selectは「選択」ですので、複数の選択もあり得ます。 Activateは「アクティブ」で一つだけです。 ご質問の内容では、一つのシートやセルを選択するので、ActivateでもSelectでも同じ結果になります。 以下が参考になるかと... http://officetanaka.net/excel/vba/speed/s2.htm

kuwong
質問者

お礼

ありがとうございます。とても分かりやすい説明でした。<m(__)m> 一つと複数なんですね。 頭を切り替えることが出来そうです。

  • wangkp
  • ベストアンサー率25% (9/35)
回答No.1

Excelが開いている場合は、ActivateとSelectの動作は一緒かもしれないけど、ある場合裏で(Excel見えない。例えば、このExcelファイルでVBAを利用して、ほかのExcelをいじる時)処理する、Activateは使えないだと思います。 Activate:指定シート見えるよに、操作できるようにする。 Select:指定シート操作できるようにする。

kuwong
質問者

お礼

ありがとうございます。とても分かりやすい説明でした。<m(__)m>

関連するQ&A

  • Excel VBA

    いつもお世話になっております。 ExcelのVBAの処理にてお聞きしたいのですが… Ret = MsgBox("項目を全て削除しますが、よろしいですか?", vbYesNo, "削除") If Ret = vbYes Then Worksheets("入力").Select Range("C10:I59").ClearContents Range("L10:R59").ClearContents Range("W10:Y59").ClearContents Range("AB10:AH59").ClearContents Range("AM10:AO59").ClearContents Range("AR10:AX59").ClearContents Range("BC10:BE59").ClearContents   ・   ・   ・ と長々しく書いているのですが、これをもっとスマートに 書く方法はありますか?? それから、こういったことが出来るなら教えて頂きたい のですが、、、 あるExcelのシート(1枚)を、所定のディレクトリに入って いるExcelファイル(数十ファイル)のシートの先頭に全て挿入して いくといったものなのですが、VBAで出来ますか?? 出来なくとも、近い感じの処理または、参考文献などあったら 教えて下さい。 宜しくお願い致します。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • Excel Selectは使わない? VBA

    おはようございます。 ExcelのVBAを独学しております。 いまさらな質問だとは思いますが、 そこで、色々調べていたところ 「Select」はあまり使うな! ということが良く出てきました。 selectを使わず、上手くシート移動などができるのでしょうか? 私が組んでいるものは、色んなシートを切り替えなければならなく、 毎回Selectしています。 Activateを使ったこともありますが、 エラーが多発し、良く分からなかったためSelectを使用しています。 出来れば、シートをアクティブにすることなく 操作ができれば良いのですが・・・ 例)「データ」「コピー」のシートがあります。 「データ」シートのAからD列を「コピー」シートにコピー しようとするものです。 WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste どうしてもSelectを多様してしまいます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●どうしてもSelectを使わないといけない場面 ●Selectを使うのを回避するためには・・・ などなど、ご存知でしたら回答お願い致します。

  • VBAの書き方を教えてください 2

    以前にこちらで質問をさせて頂き、(http://okwave.jp/qa/q8451754.html)これに、VBAを追記していきたいのですが、移動したシートがアクティブする方法がわかりません。 移動したシートのA1000をアクティブにする場合、教えて頂いたVBAにどこに何を入れれば宜しいのでしょうか? よろしくお願いします。 Private Sub CommandButton1_Click() Dim k As Long, myFlg As Boolean For k = 1 To Worksheets.Count If Worksheets(k).Name = Range("A1") Then myFlg = True Exit For End If Next k If myFlg = True Then Worksheets(k).Activate Else MsgBox "該当シートなし" End If End Sub

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

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

  • エクセルVBA ワークシート検索について?

    エクセルで所定のワークシートにデーターを自動で記入させようと しています。 所定のワークシートが在るか無いか判断して、存在すれば、 VBAは記入動作を開始し、無ければ、VBAを終了させる。 こういった動きを作ろうとしていますが、存在しない場合に VBAを抜ける所が上手く作動しません。書き方に問題があると 思うのですが、どのような書き方がいいのか教えていただけない でしょうか。 コードの方は以下に示します Set ThisYearSheet1 = ActiveWorkbook.Worksheets("本年度基データ") With ThisYearSheet1 myYear = Mid(.Cells(1, 1), 3, 4) myMonth = Mid(.Cells(1, 1), 8, 2) End With mySheetName = CStr(myYear) & CStr(Format(myMonth, "00"))<<<<シートの名前仮取得 myMsg = "「" & mySheetName & "」" & vbCrLf & _ "のシートデーターを更新します。" & vbCrLf & _ "よろしいですか?" myButt = MsgBox(myMsg, vbYesNo) Select Case myButt Case vbYes For Each mySheet In Worksheets<<<<仮取得したシート名を探す If mySheet.Name = mySheetName Then Set ThisYearSheet2=ActiveWorkbook.Worksheets(mySheetName)<<<<仮取得したシート名が存在すれば、オブジェクトとしてセット Exit For Next mySheet Case vbNo Exit Sub End Select If ThisYearSheet2 = Nothing Then<<<エラー箇所(無ければ、VBAを終了させたい) MsgBox "" Exit Sub End If エラー箇所では、nothingの使い方が不正ですと出るのですが、、、 どなたか宜しくお願いいたします。

  • エクセルVBAで指定したセルへジャンプするコード(追加の追加質問です)

    http://oshiete1.goo.ne.jp/qa2903797.html たびたびすみません。最後にひとつだけお願いします。 お教えいただいた下のコードは順調に動作するのですが、 対象セルが結合セルの場合、エラーが出てしまいます。 とまってしまうコードの部分は With Selection.AddComment です。 エラーメッセージにはプロシージャの呼び出し、 または引数が不正です。(Error 5)と書いてあります。 結合セルは動作しないものでしょうか? Sub test01() Dim x As String Dim ThisSheet_Name As String Dim Sheet_Name As String Dim Range_Name As String Dim I As Integer, n As Integer Dim Ans As Integer Dim myComment As String '新規追加 Dim Colors As Integer '新規追加 ThisSheet_Name = ActiveSheet.Name '設定シート Select Case Workbooks.Count Case 1 MsgBox "チェックするファイルがありません。" Exit Sub Case 2 For n = 1 To 2 If Workbooks(n).Name <> ThisWorkbook.Name Then x = Workbooks(n).Name '開いている“もうひとつのブック”の名前 End If Next Case Else MsgBox "他に開いているファイルが複数のため対象を特定できません。" Exit Sub End Select I = 0 Do While (1) With ThisWorkbook.Sheets(ThisSheet_Name) If .Range("A3").Offset(I, 0).Value = "" Then MsgBox "検査項目は以上です。" ThisWorkbook.Activate Exit Do 'A列の3行目以下が、空白なら終わる End If Sheet_Name = .Range("A3").Offset(I, 0).Value Range_Name = .Range("B3").Offset(I, 0).Value myComment = .Range("C3").Offset(I, 0).Value End With Windows(x).Activate Sheets(Sheet_Name).Select Range(Range_Name).Select Colors = Selection.Interior.ColorIndex '新規追加 Selection.Interior.ColorIndex = 6 With Selection.AddComment .Visible = True .Text myComment End With Range(Range_Name).Select Ans = MsgBox("「次をチェックしますか?」", vbYesNo) Selection.Interior.ColorIndex = Colors '修正 Selection.ClearComments '新規追加 If Ans = vbYes Then I = I + 1 Else Exit Do End If Loop End Sub

  • VBAの書き方を教えてください 3

    何度も申し訳ございません。 以前にもこちらで質問させて頂いている者です。 Sheet1のrange("A1")をVLOOKUPで検索後の文字を取得し、同じ名前のシートを検索し、さらにrange("A1000")をアクティブにしてここからコードをつなげて処理しています。 range("A1")の処理が終わったら、range("A2")の処理に入り、range("A3") range("A4")を続けて処理を行っているのですが、range("A4")でVLOOKUPの検索が空白の場合、On Error GoTo myErrorで次のrange("A5")の処理に入りますが、On Error Gotoは1回のみの処理しかできないみたいで、range("A5")が空白の場合、実行時エラー9が発生してしまいます。 教えて頂いたコードを解読し、On Error Resume Nextなどを使おうとしているのですが、上手くできません。 1から10まで質問しっぱなしなのですが、どなたかご協力を頂けないでしょうか。 とりあえず自分の必要なコードはある程度省いて、2つ分のみ記載します。 本来この後、10回同じ処理を行います。 よろしくお願い致します。 Private Sub 記帳_Click()  On Error GoTo myError1  Dim i As Long  Dim myFlg As Boolean    For i = 1 To worksheets.Count If worksheets(i).Name = Range("A1").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select    ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If myError1: On Error GoTo myError2 For i = 1 To worksheets.Count If worksheets(i).Name = Range("A2").Value Then myFlg = True Exit For End If Next i If myFlg = True Then With worksheets(i) .Activate .Range("A1000").End(xlUp).Select ActiveCell.Offset(1, 0).Select   ActiveCell = Range("J1") ActiveCell.Offset(0, 1).Select ActiveCell = Range("K1") End With Else MsgBox "該当シートなし" End If End sub

  • Excel VBA「If else」の使い方

    Excelで管理台帳を作っています コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています 正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;) それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。 それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない場合)は、「今月で終了の利用者はいません」とメッセージを出し、「top_page」シートに移動させたいのです そのやり方がうまくいきません 現時点はこのように入れています Private Sub CommandButton2_Click() Worksheets("利用終了者").Select Worksheets("利用終了者").Range("A:M").Clear With Worksheets("受給者情報") .Range("A:M").Copy Worksheets("利用終了者").Range("A1") .Range("A:Q").AdvancedFilter _ Action:=xlFilterCopy, _ criteriarange:=.Range("U1:V3"), _  CopyToRange:=Worksheets("利用終了者").Range("A:M"), _ unique:=False End With MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut Sheets("top_page").Select Range("a1").Select End Sub If elseを使うんだろうな、というのは何となくわかるのですが、どこにどう入れたらちゃんと反応するのかわかりません。 一度、  (前略) If Application.CountA(Range("A2")) = 0 Then MsgBox "今月末で終了の利用者はいません", vbOKOnly + vbInformation, "確認" Else MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut End If Sheets("top_page").Select Range("a1").Select End Sub と入れてみたのですが、これだと2行目以降もデータがあっても、「今月末で終了の利用者はいません」となってしまいます 2行目以降にデータがある場合は「今月末で終了の利用者です!」とメッセージボックスを出し、2行目以降にデータがない場合は「今月末で利用終了の利用者はいません」とメッセージボックスを出したいです そのやり方を教えてください。お願いします ちなみにバージョンはExcel2010です

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

専門家に質問してみよう