[Excel][VBS]rangeとcellsの相互変換

Excelである程度複雑なVBSプログラムを作っていると、range系とcells系を変換したい時が出てきます。相互変換もできるのですが、その方法をあまり明確に書かれているページが見つからなかったので、自分でも上げてみる事にしまたし。

Option Explicit

Sub main()
    Dim m() As Long
    Dim n As String

    n = cells2range(3, 4)
    MsgBox "Cell(3, 4) => Range(" & n & ")" & vbCrLf

    m() = range2cells("D3")
    MsgBox "Range(D3) => Celss(" & m(0) & ", " & m(1) & ")" & vbCrLf

End Sub

Public Function cells2range(r As Long, c As Long) As String
    cells2range = Cells(r, c).Address(False, False)
End Function

Public Function range2cells(r As String) As Long()
    Dim c(1) As Long
    c(0) = Range(r).Row
    c(1) = Range(r).Column
    range2cells = c()
End Function

変換部分は、独立した関数として書いてありますが、関数化する必要はありません。関数化すると、配列を使用するなどしないとならないので、あまり分かりやすく無いですね。

Cells系(R1C1系)をRange系(A1系)に変換したいなら、

Cells(rowの値, clumの値).Address(False, False)

で出来ます。Addressの中を、Falseにすると、D3などと相対指定で帰って来ます。Trueにすると、$D$3と絶対指定で帰ってきます。

Range系(A1系)をCells系(R1C1系)に変換したいなら、

Range(rangeの値).Row
Range(rangeの値).Column

で出来ます。絶対表現で帰ってきます。相対指定にしたいなら、ConvertFormulaを使って変換して上げる必要があります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする