【初心者向け】Excelマクロのセルの選択|Cells表記 を Range 表記に変換する方法

【アフィリエイト広告を利用しています】
スポンサーリンク

前回は、Excelマクロでのセル選択で使用する、「Range」と「Cells」の違いや使い分けについて説明しましたが、今回はそれぞれの表記を変換する方法について解説します。

🔁 Cells(2, 3) を Range 表記に変換する方法

Cells(row, column) の形式を A1形式の文字列(例: “C2″)に変換するには、Address プロパティを使用します。

 Dim cellAddress As String
 cellAddress = Cells(2, 3).Address(False, False)  ' 結果: "C2"

このコードを使用すると、Cells(2, 3) のアドレスを絶対参照ではなく相対参照(ドル記号なし)で取得します。

✅ 表示形式の変換方法

.Address の後に何も記載しないと、絶対参照での取得となるので、$C$2 となります。
表示形式を変換したい時は、.Address の後に()で引数を記載する必要があります。

【Excelマクロ】セルの説明
引数名説明
RowAbsolute行番号に $ を付けるかどうか(つける:True
ColumnAbsolute列記号に $ を付けるかどうか(つける:True
ReferenceStyle参照形式。A1(”A1″形式)か R1C1(”R1C1″形式)
External外部参照にするかどうか(例:[Book1]Sheet1!$A$1
RelativeTo相対参照を使うときに基準にするセル範囲(ReferenceStyle = xlR1C1時)

VBAの .Address プロパティは、セルや範囲の「アドレス(住所)」を文字列として取得するための便利な機能です。オプションを指定することで、アドレスの形式を柔軟にコントロールできます。

いのこ
いのこ

RowAbsolute ColumnAbsolute はデフォルトが True(つまり $C$2)です。

Cells(2,3).Address(True, False)$C2
Cells(2,3).Address()$C$2

🔁 Range("C2") を Cells 表記に変換する方法

逆に、Range("C2")Cells の形式に変換するには、Row および Column プロパティを使用します。

✅ 例:Range("C2") を Cells(2, 3) に変換

AD = "cells(" & Range("C2").Row & "," & Range("C2").Column & ")"
 ' 結果: cells(2,3)

このコードでは、Range("C2") の行番号と列番号を取得し、それを Cells の形式で表示しています。

この1行は、C2セルの行番号と列番号を取得し、それを "cells(行,列)" という文字列として AD という変数に代入しています。つまり文字列なので、その表記を記載(記録)することは出来ますが、そのまま使ってマクロを動かすことは出来ません。

セルを実際に参照したい場合は、下記のように記載します。

Dim myCell As Range
Set myCell = Cells( Range("C2").Row, Range("C2").Column )

🔁 複数セルの範囲を変換する方法

複数のセル範囲(例: Range("A1:C3"))を Cells の形式に変換するには、開始セルと終了セルを Cells で指定し、Range 関数で範囲を作成します。

✅ 例:Range("A1:C3") を Range(Cells(1, 1), Cells(3, 3)) に変換

Dim startCell As Range
Dim endCell As Range

Set startCell = Range("A1")
Set endCell = Range("C3")

MsgBox "Range(Cells(" & startCell.Row & ", " & startCell.Column & "), Cells(" & endCell.Row & ", " & endCell.Column & "))"

このコードでは、範囲の開始セルと終了セルを取得し、それぞれの行番号と列番号を使用して Cells の形式で範囲を表現しています。結果はこうなります!

結果: Range(Cells(1, 1), Cells(3, 3))

✅ まとめ

  • 動的に指定する場合Cells が有利(行・列番号を変数化できる)
  • コードの可読性を優先する場合Range("A1") のほうが分かりやすい
  • 広い範囲を変数で指定する場合Range(Cells(), Cells()) がベスト

タイトルとURLをコピーしました