VBA R1C1参照形式からA1参照形式に変換

Excelは通常、A1参照形式で扱うことが多いがそれ以外にA列、B列ではなく列表示も数字のR1C1参照形式がある。

昭和世代にはロータス形式、マルチプラン形式のほうが馴染みやすいが今では通じない死語かも知れない。

VBAでは変数を扱う場合、数字のほうが変数処理をしやすいのでR1C1形式を使うことが多いがA1形式に変換したい場合がある。

例えば 53列をA1形式に変換に変換するには

Cells(1,1)= Cells(1,53).Address

$BA$1

知りたいのは「BA」なので$や1はいらない。

「BA」のみを抽出する方法は

 

Dim n As String
n = Cells(1, 53).Address(True, False)
Cells(1, 1) = Left(n, (InStr(n, "$") - 1))  ①
Cells(2, 1) = Left(n, (Len(n) - 2))     ②

BA
BA

または

Dim n As String
n = Cells(1, 53).Address(False, False)
Cells(1, 1) = Left(n, (Len(n) - 1))

BA

 

※ VBAの処理で行も可変の場合は①を使う必要がある。

 

Addressプロパティは

 expression.Address (RowAbsoluteColumnAbsoluteReferenceStyleExternalRelativeTo)

RowAbsolute・・行の部分True:絶対参照、False:相対参照

ColumnAbsolute・・列の部分True:絶対参照、False:相対参照

ReferenceStyle・・既定値は xlA1 

External・・既定値は False 

RelativeTo・・RowAbsolute、ColumnAbsolute両方Falseの場合でReferenceStyle が xlR1C1 である場合は、相対参照の開始点を含める必要がある

 

必要になる場面に遭遇することはあまりないがA1参照形式で処理した場合は使える。