ExcelマクロVBA技術解説
Application.Goto使用時の注意

ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
最終更新日:2016-09-19

Application.Goto使用時の注意

Applicationのメソッドに、Gotoメソッドがあります、


Application.Gotoメソッドは、指定ブックの、指定シートの、指定セル範囲を選択します、
そのブック・シートがアクティブでなければアクティブにします。

最初に、Application.Gotoの一般的な文法説明をします。


Application.Goto(Reference, Scroll)

Reference
移動先を指定します。
Range オブジェクト、R1C1 形式のセル参照文字列、および Visual Basic のプロシージャ名を表す文字列です。
この引数を省略すると、移動先は、直前に Goto メソッドを使ったときのセル範囲になります。


Scroll

移動先セル範囲の左上端がウィンドウの左上端に表示されるようにウィンドウをスクロールするには、True を指定します。
ウィンドウをスクロールしないようにするには、False を指定します。
既定値は False です。


Selectメソッドとは、以下の点で違いがあります。

アクティブでないワークシートのセル範囲を指定すると、そのシートに切り替えてからセル範囲が選択されます。
※Selectメソッドでは、最前面にないワークシートを対象としたとき、そのセル範囲は選択されますが、ワークシートはアクティブにはなりません。
Goto メソッドには引数 Scroll があり、ウィンドウを自動的にスクロールできます。
Select メソッドには引数 Replace がありますが、Goto メソッドにはありません。



とても便利なメソッドです。
ウィンドウ枠の固定をしているときには、特に重宝します。
ウィンドウ枠を固定をしているときは、単にA1をSelectしても元の選択セル位置によっては、完全にはスクロールされません。
固定枠の外側が選択されているとき、固定枠の外側はスクロールされないのです。
しかし、Application.Gotoを使えば、完全にスクロールが行われます。

しかし、時に問題があるようです。

Excelのアプリケーションそのものが異常終了してしまう事が有ります。
どのような条件で発生するかが判明していませんが、
間違いなく、このApplication.Gotoが原因でExcelが終了してしまいます。
原因および発生条件が不明なので、断定した発言はしづらいのですが、
複数の環境(PC)で確認していますし、
Application.Gotoの使用を取りやめたことで解決してます。


ただし、発生条件と言うほどでもないのですが、
Application.Gotoの実行以前に、かなりのシート操作(つまり複雑な処理)が行われているマクロに限定されるようです。
短めのVBAコード(つまり簡単な処理)であれば、現象は発生していません。
恐らく、解決方法としては、
DoEvents
Application.ScreenUpdating = True
このあたりとの組み合わせにより回避できるのではないかと思われますが、
SelectとActiveWindow.LargeScrollで書き直した方が確実に対処で来ます。

ネットで検索しても、同様の報告が見当たりませんでしたので、
自身の覚書の意味で掲載しておきます。
原因および発生条件等で、何か情報がありましたら、ご一報いただけると助かります。




同じテーマ「マクロVBA技術解説」の記事

入力規則のドロップダウンが消えてしまうマクロ(Shapes内のDrop Down)
実行時にトラップ可能なエラー番号一覧
フォルダー・ファイル(ブック)・シートの文字制限
Excel2013におけるScreenUpdatingの問題点
Dir関数の制限について
よくあるVBA実行時エラーの解説と対応
Application.Goto使用時の注意
ScreenUpdating=False時にエラー停止後にシートが固まったら
標準スタイル違いの問題点:標準フォント複写、列幅をピクセルで合わせる

新着記事NEW ・・・新着記事一覧を見る

Withステートメントの実行速度と注意点|VBA技術解説(6月6日)
VBA+SeleniumBasicで検索順位チェッカー(改)|VBA技術解説(6月2日)
マクロでShift_JIS文字コードか判定する|VBA技術解説(6月1日)
Shift_JISのテキストファイルをUTF-8に一括変換|VBAサンプル集(5月31日)
「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)
Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.ひらがな⇔カタカナの変換|エクセル基本操作
7.繰り返し処理(For Next)|ExcelマクロVBA入門
8.マクロって何?VBAって何?|ExcelマクロVBA入門
9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄



  • >
  • >
  • >
  • Application.Goto使用時の注意

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ