VBAで自動化 VBA一覧 アクティブ/非アクティブ セル・シート・ブック操作

【VBA】Application.Gotoメソッドとは:セル・範囲を移動

Application.Gotoメソッドは、Excel VBAで特定のセルや範囲にフォーカスを移動させるために使用されるメソッドです。Selectメソッドと似た動作をしますが、Gotoメソッドにはスクロールやシートのアクティブ化などの柔軟なオプションがあります。Excel VBAにおけるApplication.Gotoメソッドの使い方について説明します。

Excel VBAでApplication.Gotoメソッドを使ってセルや範囲を移動する方法

Application.Gotoメソッドメソッドとは?

Application.Gotoメソッドは、Excel VBAで特定のセルや範囲にカーソルを移動させ、そのセルや範囲をアクティブにするために使用されます。Gotoメソッドは、直接的なセル選択やシートをまたいで移動にも対応しているため、複数のシートを操作する際に便利です。

【基本構文】

Application.Goto Reference:=Range("セルまたは範囲"), Scroll:=True

  • Reference: 移動するセルや範囲を指定します。必須です。
  • Scroll:Trueに指定されたセルや範囲にスクロールされ、False時にスクロールは行われません(省略可能、サンプルコードはTrue)。

特定のセルに移動する

特定のセルに移動して、それをアクティブにする基本的な使い方は、次の通りです。

Sub GotoSpecificCell()

' A1セルに移動し、スクロールも行う
Application.Goto Reference:=Range("A1"), Scroll:=True

End Sub

A1セルに移動してスクロールが行われます。Gotoメソッドは、Selectメソッドと同様に、指定したセルにフォーカスを移動させますが、スクロールを伴うのが特徴です。

セル範囲に移動する

範囲全体に移動してフォーカスを当てる場合は、Rangeオブジェクトを指定します。

Sub GotoRange()

' A1からB5の範囲に移動
Application.Goto Reference:=Range("A1:B5"), Scroll:=True

End Sub

A1からB5の範囲を選択して、範囲全体が表示されるようにコードも実行します。

シートを跨いで移動

Application.Gotoメソッドは、異なるシートにあるセルや範囲に移動する際にも役立ちます。たとえば、シートを指定して別のシートのセルに移動することができます。

【使用例: 別のシートに移動】

Sub GotoCellInAnotherSheet()

' シート2のB2セルに移動
Application.Goto Reference:=Sheets("Sheet2").Range("B2"), Scroll:=True

End Sub

Sheet2のB2セルに移動し、フォーカスが当たります。Application.Gotoはシートを跨いだ移動も簡単にでき、その間のシート操作を効率的に行うことができます。

スクロールを抑制する

ScrollパラメータをFalse設定することで、指定したセルにフォーカスを当てるがスクロールは行われないという動作にできます。これは、表示範囲を維持したままフォーカスを変更したい場合に便利です。

【使用例:スクロールを無効にする】

Sub GotoWithoutScrolling()

' A10セルに移動するがスクロールは行わない
Application.Goto Reference:=Range("A10"), Scroll:=False

End Sub

A10セルにフォーカスを移しますが、スクロールは行われないため、画面表示の状態はそのままです。

名前付き範囲に移動する

Excel では、名前付き範囲(名前定義されたセル範囲)に移動することができます。名前付き範囲を使用すると、特定の範囲先にアクセスでき、コードの可読性が向上します。

【使用例: 名前付き範囲に移動】

Sub GotoNamedRange()

' "DataRange" という名前の範囲に移動
Application.Goto Reference:="DataRange", Scroll:=True

End Sub

名前が定義されたDataRangeという範囲に移動します。名前付き範囲を使用することで、移動範囲や範囲が変更されてもコードを再利用できます。

最終行に移動する

Excelでデータが入力されている最終行に移動したい場合、Application.Gotoを使って動的に最終行に移動することができます。

Sub GotoLastRow()

Dim lastRow As Long

' A列の最終行を取得
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

' 最終行に移動
Application.Goto Reference:=Cells(lastRow, 1), Scroll:=True

End Sub

A列の最終行に移動し、そのセルをアクティブにします。データが入力されている範囲の最後に移動したい場合に役立ちます。【VBA】最終行を取得する方法(Rows)

最終列に移動する

最終行と同様に、データが入力されている最終列に移動する場合にもApplication.Goto使用できます。

Sub GotoLastColumn()

Dim lastColumn As Long

' 1行目の最終列を取得
lastColumn = Cells(1, Columns.Count).End(xlToLeft).Column

' 最終列に移動
Application.Goto Reference:=Cells(1, lastColumn), Scroll:=True

End Sub

1 行目の最終列に移動し、そのセルをアクティブにします。特定の行の最後に次に移動するために便利です。【VBA】最終列取得

Gotoメソッドを使う際の注意点

  • スクロール動作に注意: スクロールが不要な場合、Scroll:=Falseをわかりやすく指定することで、視覚的な変更を防ぐことができます。特に大きなシートを操作する場合、意図的にスクロールを防ぐことが重要です。
  • 名前付き範囲の存在確認: 名前付き範囲に移動する場合、その範囲が存在するかどうかを事前に確認しておくと、エラーを回避できます。

まとめ

Application.Gotoメソッドは、Excel VBAでセルや範囲に迅速に移動するために非常に便利なツールです。Scrollオプションを使用することで、フォーカスを当てつつスクロール動作も制御でき、異なるシート間での移動も簡単に行います。名前付き範囲のサポートや、動的なセル範囲への対応など、様々なシーンでの活用が可能です。

    -VBAで自動化, VBA一覧, アクティブ/非アクティブ, セル・シート・ブック操作