RangeとCellsでセルの指定方法が違う
Rangeは基本は列名のアルファベット+行番号の数字の文字列、Cellsは行番号と列番号をそれぞれ数字で指定するじゃないですか。
たまに列番号をアルファベットに変換したいとか、その逆があるわけです。
そんな時にはこの関数の出番。
2020/07/20 コメントよりコードに反映
@takahasinaoki さん、ご指摘とご提案ありがとうございました!
列番号(数字)を列名(アルファベット)に変換
引数の列番号の列全体の絶対参照アドレスを取得して$
でSplit
して列名取得。
' 列番号→列名
Function ColumnIdx2Name(ByVal colNum As Long) As String
ColumnIdx2Name = Split(Columns(colNum).address, "$")(2)
End Function
列名(アルファベット)を列番号(数字)に変換
引数のアルファベットの列全体から列番号取得。
' 列名→列番号
Function ColumnName2Idx(ByVal colName As String) As Long
ColumnName2Idx = Columns(colName).column
End Function
特に列番号→列名は、文字コードが~とか、A~Zが26文字だから~とか、AZ列以降だと~とか、いろいろ考えたんだけど、面倒になってきたのでおそらく一番面倒じゃない方法に行きつきました。
ワンライナーで書けるものはワンライナーがいいよね。後々読んでもわかりやすいし。