
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ランキング
-
excelで、スクロールをすると限...
-
エクセルで連続データから、数...
-
エクセルの画面で十字マークが...
-
エクセルでハイパーリンクのU...
-
セルをクリックすると付箋のよ...
-
Excel 小さくなったスクロール...
-
複数のセルの入力内容を一度に...
-
excelで1行ごとに一気に削除す...
-
エクセル 画面上の行数を調節...
-
エクセルVBA 複数行にまたがっ...
-
エクセルで任意のセルをクリッ...
-
エクセル 数値を全て「1」にす...
-
EXCEL アルファベットと数字の...
-
Excel選択を繰り返すとセルの色...
-
エクセルでカーソルが四方に矢...
-
エクセルで1つおきに列を削除...
-
Excelで表のデータを並び替えた...
-
エクセルで0を除いて昇順に並...
-
ピポットテーブルエラー解決方法
-
Excelで選択範囲の合計をマクロで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
複数のセルの入力内容を一度に...
-
Excel 小さくなったスクロール...
-
EXCEL アルファベットと数字の...
-
エクセルの画面で十字マークが...
-
エクセル 画面上の行数を調節...
-
セルをクリックすると付箋のよ...
-
excelで1行ごとに一気に削除す...
-
エクセルでハイパーリンクのU...
-
エクセル 数値を全て「1」にす...
-
エクセルで、結合したセルを選...
-
エクセルで任意のセルをクリッ...
-
Excelで表のデータを並び替えた...
-
ピポットテーブルエラー解決方法
-
エクセルでカーソルが四方に矢...
-
エクセルVBA 複数行にまたがっ...
-
Shift押しながら、矢印ボタンで...
-
列選択で勝手に広範囲に範囲選...
-
エクセルで1つおきに列を削除...
おすすめ情報