[Excel VBA]アクティブセルにする方法と現在のセルの取得方法

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公式の情報も参照しつつ、是非参考にして頂ければと思います。

スキルを身につける プログラミングスクールおすすめ7選!徹底比較した失敗しない選び方

フリーランスで収入上げる フリーランスエージェントおすすめ16選と選び方の注意ポイント