- 数値から列番号を取得する(引用:mougモーグ)
Excelの列番号はA・B・C…で表しますが、VBAでセルを操作するとき、列を数値で指定したいこともあります。小さい数字なら、1 はA列、2 はB列と、脳内で変換することも簡単ですが、21や24など大きい数字の列番号となると、間違えやすくなりますね。
こんなときはAddressプロパティを使うと便利です。
MsgBox Cells(1, 27).Address
を実行すると「$AA$1」のような文字列が返ります。
Addressプロパティには引数があり、行と列のそれぞれを、絶対参照または相対参照で表すことが可能です。
MsgBox Cells(1, 27).Address(True, False)
を実行すると、「AA$1」のように行番号だけが絶対参照で表されます。
このアドレスは「$」より左側が列番号となっているので、次のようにすると列番号だけを取得できます。Sub Sample2() Dim num As Long, buf As String num = InputBox("列の数字を入力してください") buf = Cells(1, num).Address(True, False) buf = Left(buf, InStr(buf, "$") - 1) MsgBox buf End Sub
- Range.Address プロパティ(引用:Microsoft Docs)
コード記述時の言語で参照範囲を表す文字列型 (String) の値を返します。
構文
expression.Address (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
例Set mc = Worksheets("Sheet1").Cells(1, 1) MsgBox mc.Address() ' $A$1 MsgBox mc.Address(RowAbsolute:=False) ' $A1 MsgBox mc.Address(ReferenceStyle:=xlR1C1) ' R1C1 MsgBox mc.Address(ReferenceStyle:=xlR1C1, _ RowAbsolute:=False, _ ColumnAbsolute:=False, _ RelativeTo:=Worksheets(1).Cells(3, 3)) ' R[-2]C[-2]
解ったこと
No | コード | 戻り値 |
1 | Cells(1,1),Address | $A$1 |
2 | Cells(1,1),Address(False) | $A1 |
3 | Cells(1,1),Address(True,False) | A$1 |
4 | Cells(1,1),Address(ReferenceStyle:=xlR1C1) | R1C1 |
完成したコード
01.Public Function get列記号(arg列番号 As Variant) As Variant 02.On Error GoTo Err_get列記号 03.Dim mbTitle As String 04. 05. mbTitle = "get列記号/" & getMBTitle() 06. If IsNumeric(arg列番号) Then 07. STRAns = Cells(1, Val(arg列番号)).Address(True, False) 08. get列記号 = Left(STRAns, InStr(STRAns, "$") - 1) 09. Else 10. STRAns = Range(arg列番号 & "1").Address(ReferenceStyle:=xlR1C1) 11. get列記号 = Mid(STRAns, InStr(STRAns, "C") + 1) 12. End If 13. 14.Exit_get列記号: 15. Exit Function 16. 17.Err_get列記号: 18. MsgBox "列番号の変換に失敗しました。" & vbCrLf _ 19. & "Excelの限界を超えている可能性があります。" & vbCrLf & vbCrLf _ 20. & " ◆列番号=" & arg列番号 _ 21. , vbCritical, mbTitle 22.' Resume Exit_get列記号 'これがあるとDebugPrintで「Functionがない」となることが... 23. 24.End Function
*1:シートに関係なく実行できるので