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