
No.4ベストアンサー
- 回答日時:
補足:
たぶん、VBAプログラミングする人は、感覚的に、Select と Activateを分けてつかっていらっしゃると思いますが、今回、その感覚的な部分を計数化してみました。
'<標準モジュール>
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Sub Select_or_Activate1()
Dim myTime As Long
Dim LapTime As Double
myTime = timeGetTime
For i = 1 To 30000
Cells(i, 1).Activate 'Selectと使い分け
Next i
LapTime = (timeGetTime - myTime) / 1000
MsgBox LapTime
End Sub
時間を測るためですから、使用する際には、コメントは削除します。
セルは、A1:A30000の全セルに「a」を一字ずつ入れました。
実行時は、画面は、ワークシートを出したままにします。
結果は、古いPC ですが、
(秒)
Activate :97.465, 97.287
Select : 95.818, 96.18
と、思ったとおりSelectが、速いことが分かりました。これは、Rangeオブジェクトに対するものですが、約1秒ほどの違いは、かなり大きい差だと思います。
No.3
- 回答日時:
Application.Goto Range("A1")
Application.Goto Reference:=Range("A1")
の違い。
基本的なことなのですが、Reference:=~ というのは、名前付き引数と言います。
expression.Goto(Reference, Scroll) とあるように、名前付き引数は、その順番を換えることが可能になります。
例:
Application.Goto Scroll:=True, Reference:=Range("A1")
名前付き引数がなければ、
Application.Goto Range("A1"), True
と、引数の順番を換えることが出来ません。
それで、Goto というのは、ワークシートの左上のネームボックスに対する動作で、Applicationクラスに属しているから、Rangeオブジェクトのように、アクティブシートに従う必要がありません。つまり、直接、Worksheets(3).Select なしに、シートを越えて、移動することが可能になります。しかし、Bookまでは、またぐことが出来ないようですね。
例:
Sub Goto_test()
Worksheets(1).Activate
Application.Goto Range("C1")
MsgBox ActiveSheet.Name & "!" & ActiveCell.Address
Application.Goto Worksheets(3).Range("C1")
MsgBox ActiveSheet.Name & "!" & ActiveCell.Address
End Sub
Selectメソッド とActivate メソッドの違いというのは、
ヘルプの
Activate:
Range の説明に、
1 つのセルをアクティブにします。選択範囲の中の単一セルをアクティブに
するときに使います。セル範囲を選択するときは、Select メソッドを使い
ます。
とありますが、私のExcelでは、以下のようなコードでもエラーは起きません。
例:
Sub Activate_Test()
Range("A1,A10").Activate
Range("A10:A12").Activate
End Sub
Activate を用いると、次のA10:A12で、Activate が、その選択した範囲内に掛かっていると、A10:A12 が選択されなくなってしまう、という誤動作がありますね。
やはり、Activate は、ヘルプに従って、1つのセルを選択しアクティブにする時で、Select は、範囲を選択するときに用いるというように考えたほうが無難なようです。
以上が、私の調べた解釈です。Select Activateなどは、基本的なことのようですが、明確なエラーがないので、ここらの話は、若干、その説明に不安が残ります。
No.2
- 回答日時:
Application.Gotoは、
Application.Goto(reference,scroll)
のような引数で指定します。
referrenceもscrollも省略可能ですので
Application.Goto Range("A1")
は、referenceにRange("A1")を指定したことになります。
また、Reference:=Range("A1")
の形式は、名前を指定して引数を渡す方法で、
この場合も、referenceにRange("A1")を指定したことになります。
なので、記法が違うだけで全く同じです。
Application.Goto Reference:=Range("A1")
Range("A1").Select
Range("A1").Activate
の3つは、ほとんど同じというか結果として同じだと思います。
ただ、gotoは、スクロールして位置を変える
selectは範囲を選択状態にする(この場合、1つなので、Activateと変わらない)
Activateは指定したセルをアクティブセルにするというそれぞれの機能はちがいます。
No.1
- 回答日時:
Goto メソッドはReferenceを省略してもかまわないようです
また開くときにA1に移動させるなら下記もありと思います
Private Sub Workbook_Activate()
Range("A1").Select
または
Range("A1").Activate
End Sub
この回答への補足
ありがとうございます。
ただの省略形なんですね。。。
では
Application.Goto Reference:=Range("A1")
Range("A1").Select
Range("A1").Activate
の3つにはどのような違いがあるのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) 【VBA】A列にある連続したデータの1番下に文字列を入力したい 1 2023/01/28 04:40
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Excel(エクセル) 【マクロ】PasteSpecialメソッドにて、コードが動かない理由が分かりません 2 2023/08/15 20:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリの結果を、既存...
-
access2021 強制終了してしまう
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
アクセスの更新クエリでカレン...
-
ACCESS VBA でのエラー解決の根...
-
AccessVBAで任意の複数リンクテ...
-
Microsoft365にAccessってあり...
-
Accessのクエリで、replace関数...
-
Excelを開く時と閉じる時に一度...
-
列が255以上のCSVファイルをAcc...
-
Accessのフォーム上のテキスト...
-
エクセルのVBAについて教えてく...
-
Access で半角スペースと全角ス...
-
MS.Access でサブフォーム付の...
-
Accessのレポートについて
-
access2019の起動が遅い
-
access2021 メッセージボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
Accessのクエリで、replace関数...
-
access2021 強制終了してしまう
-
ACCESS VBA でのエラー解決の根...
-
Access VBA [リモートサーバー...
-
Accessのスプレッドシートエク...
-
Accessのレポートについて
-
access2021 VBA メソッドまたは...
-
Access Error3061 パラメータが...
-
access2019 チェックボックスと...
-
Accessのクエリの結果を、既存...
-
accessでlaccdbファイルが削除...
-
Access VBA を利用して、フォル...
-
accessデータを指定したExcel、...
-
Accessのリンクテーブルのパス...
-
列が255以上のCSVファイルをAcc...
-
Accessのクエリの印刷設定
-
Accessでレポートを印刷する時...
-
Accessフォームの配色テーマを...
-
Accessデータベースに含まれる...
おすすめ情報