ray88’s diary

お仕事で困ったとき用の自分用の覚書

Excel VBA セルアドレスより列番号を取得する

セルアドレスより列番号を取得
※セルアドレスよりアルファベット部分と行数部分を別々にして戻り値として返す部品と
 アドレスのアルファベット部分を元に列番号を抽出する部品を組み合わせています
■呼び出し元プロシージャ

Sub 列番号取得()
    Dim columnIndex As Long    
    columnIndex = fncGetColumnIndex("H2")    
    MsgBox columnIndex
End Sub

■呼び出し先プロシージャ①

Function fncGetColumnIndex(strAddress As String) As Long
'-------------------------------------------------------
'機能:セルアドレスよりカラムのインデックス番号を取得
'引数1:セルアドレス
'戻り値:カラムのインデックス番号
'-------------------------------------------------------
    Dim strNum As Long
    Dim strChr As String    
    Call infoCellAddress(strAddress, strNum, strChr)
    fncGetColumnIndex = Columns(strChr).Column
End Function

■呼び出し先プロシージャ②

Sub infoCellAddress(strCellAddress, strNum, strChr)
'------------------------------------------------
'機 能:セルアドレス(String型)より行数のみと
'       列名のアルファベットのみを個別に抜き出す
'引数1:セルアドレス(String型)
'引数2:行数格納用変数(String型)
'引数3:列名アルファベット格納用変数(String型)
'-----------------------------------------------
        '取得したセルアドレスからRowの数字のみ、アルファベットのみを取り出す
        With CreateObject("VBScript.RegExp")
            .Global = True
            '数字のみを取り出す
            .Pattern = "[A-Z,$]*"
            strNum = .Replace(strCellAddress, "")
            'アルファベットのみを取り出す
            .Pattern = "[1-9,$]*"
            strChr = .Replace(strCellAddress, "")
        End With
End Sub

■実行結果