こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで選択しているセルの位置を取得する方法を知っていますか?
選択しているセルの位置を取得して処理を書きたいケースは、よくあります。
そこで今回は、
・選択しているセルのアドレスを取得する方法
といった基礎的なことから、
・選択しているセルの行番号・列番号を取得する方法
・検索にヒットしたセルの情報を取得するサンプルコード
といった応用的な方法まで、徹底的に解説します!
Addressプロパティを使ってセルのアドレスを取得する方法
はじめに、Addressプロパティを使ってセルのアドレスを取得する方法について解説します。
次のように書くことで、簡単にセルのアドレスを取得することができます。
ActiveCell.Address
ただ、オプションを指定せずにAddressプロパティを使った場合は、次のように絶対参照でセルのアドレスを取得してしまいます。
実行前の選択セル:
サンプルコード:
Sub Test() Debug.Print ActiveCell.Address End Sub
実行結果:
$A$1
そのため、相対参照にする方法も合わせて覚えておくのがおすすめです!
行、列それぞれ絶対参照・相対参照をTrue・Falseで以下のように設定できます。
- RowAbsolute:行の絶対参照・相対参照を設定
- ColumnAbsolute:行の絶対参照・相対参照を設定
行・列の絶対参照・相対参照を確認するサンプルを用意しました。
実行前の選択セル:
サンプルコード:
Sub Test1() '絶対参照 Debug.Print ActiveCell.Address '行のみ相対参照 Debug.Print ActiveCell.Address(RowAbsolute:=False) '列のみ相対参照 Debug.Print ActiveCell.Address(ColumnAbsolute:=False) '行・列どちらも相対参照 Debug.Print ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) End Sub
実行結果:
$A$1 $A1 A$1 A1
このように、オプションで絶対参照、相対参照を変えることができます。
合わせて覚えると便利な行番号・列番号を取得する方法
次に、行番号・列番号を取得する方法について解説します。
選択している行番号・列番号はそれぞれRow・Columnプロパティで取得することができます。
使い方:
ActiveCell.Row '行番号 ActiveCell.Column '列番号
行番号・列番号を取得するサンプルコードを用意しました。
実行前の選択セル:
サンプルコード:
Sub Test2() Debug.Print "行番号:" & ActiveCell.Row Debug.Print "列番号:" & ActiveCell.Column End Sub
実行結果:
行番号:3 列番号:4
このように、簡単に行番号・列番号を取得することができます。
検索したセルのアドレス・行番号・列番号を取得する方法
ここまで読んだ方の中で、「セルのアドレス、行番号、列番号はいつ使うんだろう?」と思った方もいるのではないでしょうか。
そんな方向けに、検索でヒットしたセルのアドレス・行番号・列番号を取得するサンプルを用意しました。
サンプルコード:
Sub Test3() Dim rngHitCell As Range '検索でヒットしたセル Dim rngSearchArea As Range '検索するセル範囲 Const keyword = "侍エンジニア3" '検索に使う名前 '完全一致でヒットしてセルを取得 Set rngSearchArea = Range("A1:C6") '検索対象のセル範囲をセット Set rngHitCell = rngSearchArea.Find(keyword, LookAt:=xlWhole) 'セルのアドレス・行番号・列番号を取得 Dim strAddress As String 'アドレス Dim intRowNo As String '行番号 Dim intColNo As String '列番号 strAddress = rngHitCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) intRowNo = rngHitCell.Row intColNo = rngHitCell.Column 'セルのアドレス・行番号・列番号を出力 Debug.Print "アドレス:" & strAddress Debug.Print "行番号:" & intRowNo Debug.Print "列番号:" & intColNo End Sub
実行結果:
アドレス:B4 行番号:4 列番号:2
「Find(キーワード , LookAt:=xlWhole)」で指定したキーワード(侍エンジニア3)で完全一致するセルを取得し、取得したセルのアドレス・行番号・列番号を出力するサンプルコードです。
取得した行番号を使って応用すると、次のように「侍エンジニア3」でヒットしたデータの生徒番号・得意言語を取得するコードを作ることもできます。
サンプルコード:
Sub Test4() Dim rngHitCell As Range '検索でヒットしたセル Dim rngSearchArea As Range '検索するセル範囲 Const keyword = "侍エンジニア3" '検索に使う名前 '完全一致でヒットしてセルを取得 Set rngSearchArea = Range("A1:C6") '検索対象のセル範囲をセット Set rngHitCell = rngSearchArea.Find(keyword, LookAt:=xlWhole) 'ヒットした行番号を取得 Dim intRowNo As String intRowNo = rngHitCell.Row '行番号を使って生徒番号・得意言語を取得 Dim strStudentNum As String Dim strGoodLang As String strStudentNum = Cells(intRowNo, 1).Value strGoodLang = Cells(intRowNo, 3).Value 'セルのアドレス・行番号・列番号を出力 Debug.Print "行番号:" & intRowNo Debug.Print "生徒番号:" & strStudentNum Debug.Print "名前:" & keyword Debug.Print "得意言語:" & strGoodLang End Sub
実行結果:
行番号:4 生徒番号:A00003 名前:侍エンジニア3 得意言語:ruby
このように検索でヒットしたデータを取得するときにも使えるので、Findメソッドとあわせて覚えておくのがおすすめです!
Findメソッドの詳しい使い方については以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、選択しているセルのアドレス・行番号・列番号を取得する方法について解説しました。
最後に解説したサンプルのように、覚えておくと便利な使い道は多いです。
使い方も簡単なので、ぜひ使ってみてくださいね!