[Excel VBA]アクティブセルにする方法と現在のセルの取得方法
本記事のテーマ
  • Excel VBAでアクティブセルにする方法
  • Excel VBAで現在のセルを取得する方法

今回は上記のテーマで解説をしていきます。
アクティブセルとは入力作業ができる状態になっているセルのことを指します。

基本コードとしては下記となっていますが、それぞれどのように使っていくのか詳しく解説をしていきます。

アクティブセルにする

Dim range1 As Range
Range(“A1”).Activate

現在のセルを取得する

Dim range1 As Range
Range(“A1”).Activate
Set range1 = ActiveWindow.ActiveCell

それではそれぞれ見ていきましょう。

[Excel VBA]アクティブセルにする基本的な方法

まずはアクティブセルにする基本的な方法について解説をしていきます。

アクティブセルの基本的な特性について先に触れると下記の通りです。

  • アクティブセルは一つのみ
  • 複数選択されている場合は白色になってるセルがアクティブセル

    下記の画面でいうところの赤枠で囲われた白色のところがアクティブセルというわけです。

    基本的なコード

    上記でも紹介した通り、基本的なコードは下記の通りです。

    Dim range1 As Range
    Range(“A1”).Activate

    上記の基本コードはRangeでの指定としていますが、下記のようにcellsプロパティを使っての指定でも大丈夫です。

    cells(1,1).Activate

    アクティブに設定してからコピーや貼り付け等さまざまな動作をすると思うので、指定のしやすい方を選んで使っていきましょう。

    他のセルが選択された状態でアクティブセルを設定した場合

    他のセルが選択されている状態のところで指定のセルをアクティブにしたいという場合もあるかと思います。

    「B2:D3」を選択している→A1をアクティブセルにしたい

    このような場合は、A1をアクティブセルにするメソッドを実行すると「B2:D3」のセル指定が解除され、A1セルがアクティブセルとなります。

    元々アクティブセルだったセルの位置を取得したいという場合は後述のセルを参照する方法を参考にしながら、変数に入れておくようにしましょう。

    アクティブでないワークシートのセルをアクティブにする方法

    基本的には上記のコードでセルをアクティブにすることが可能ですが、アクティブでないワークシートのセルをアクティブにする場合は+@が必要です。

    対象のシートをアクティブにした上でアクティブにするセルをしていてActivateする必要があります。具体的にいうと下記のようになります。

    Worksheets(2).Activate
    Worksheets(2).Range(“A1”).Activate

    少し面倒ではありますが、ワークシートをアクティブにして選択した状態にしないと下記のようなエラーが発生してしまいます。

    実行時エラー '1004':アプリケーション定義またはオブジェクト定義のエラーです。

    アクティブではないワークシートのセルをアクティブにしたい場合はしっかりとワークシートを指定した上でアクティブにするようにしましょう。

    [Excel VBA]現在のセルを参照する方法

    ここまでは非アクティブなセルをアクティブにする方法について見てきましたが、続いては現在アクティブなセルを参照する方法について見ていきましょう。

    最初に基本的なコードを見た上で細かい部分について解説をしていきます。

    基本的なコード

    現在のセルを参照する基本的なコードは下記の通りです。

    Dim range1 As Range
    Set range1 = ActiveWindow.ActiveCell

    上記のようにRangeオブジェクトを使う場合は「Set ~ .ActiveCell」にて現在のセルを参照することができます。

    現在のセルの行や列の位置を参照する

    現在のセルの行や列の位置を参照する場合に関しては、下記のようにRowプロパティやColumnプロパティを使用することで取得できます。

    Dim cellrow As Integer
    Dim cellcolumn As Integer
    cellrow = ActiveCell.Row ‘行位置の取得
    cellcolumn = ActiveCell.Column ‘列位置の取得

    上記の例は変数へ格納していますが、「Debug.Print」を使用すれば実際に取得できてるのをわかりやすく目で確認することも可能です。

    Debug.Print ActiveCell.Row ‘行位置の出力
    Debug.Print ActiveCell.Column ‘列位置の出力

    ※イメージ

    現在のセルの座標を取得する

    座標として現在のセルの位置を取得する場合はAddressプロパティを使用します。

    Dim CellAddress As String
    CellAddress = ActiveCell.Address

    Addressプロパティでオプションを指定しない場合、絶対参照の形で「$C$14」となります。

    参照方法を変えたい場合は下記のようにすることで取得形式を変更することができます。

    Dim CellAddress As String
    CellAddress = ActiveCell.Address(False, False) ‘ C14
    CellAddress = ActiveCell.Address(True, False) ‘ C$14
    CellAddress = ActiveCell.Address(False, True) ‘ $C14

    LeftプロパティとTopプロパティを使用して取得する

    LeftプロパティとTopプロパティはセル範囲の左端までの距離や上端までの距離を取得することができます。

    これは現在のセルに対しても有効で下記のように使うことが可能です。

    Dim range1 As Variant
    range1 = ActiveCell.Top
    range1 = ActiveCell.Left

    上記でデフォルトの列幅・行高さの場合、C3セルを指定しているとTOPは「37.5」、LEFTは「108」という値を返してくれます。

    参考:Excel VBA ActiveCellに関するMicrosoftのリファレンス

    ここまで現在のセルを取得する方法やアクティブセルにする方法について、基本的な使い方の解説をしてきました。

    Microsoftも公式情報として下記の通り使い方の例を示しています。

    アクティブ セルを操作する

    Sub SetValue()
    Worksheets(“Sheet1”).Activate
    ActiveCell.Value = 35
    End Sub

    アクティブ セルを移動する

    Sub SetActive_MakeBold()
    Worksheets(“Sheet1”).Activate
    Worksheets(“Sheet1”).Range(“B5”).Activate
    ActiveCell.Font.Bold = True
    End Sub

    アクティブ セルの周囲のセルを選択する

    Sub Region()
    Worksheets(“Sheet1”).Activate
    ActiveCell.CurrentRegion.Select
    Selection.Style = “Currency”
    End Sub

    引用元:Microsoft

    Microsoft公式の情報も参照しつつ、是非参考にして頂ければと思います。