自作関数 列を英字で求める。

列を英字で求める

Excelを使う際、列数から英字を求めたい!と思ったことはないでしょか?
例えば、列数2ならB、5ならEです。
今回は、列数から英字を求める自作関数を作ってみました。

1 閲覧対象者

列を英字で取得したい人。

2 得られる効果

VBAで数式を直接代入する際に楽になる。

3 設計

解析中w

以下コード↓↓

Public Function CnvR1C1(ByRef CellColumnNo As Integer) As String
    Dim Syo     As Integer
    Dim Amari   As Integer
    Dim Str1    As String
    Dim Str2    As String

    If CellColumnNo > 256 Then
        Exit Function
    End If
    
    Syo = CellColumnNo \ 26
    Amari = CellColumnNo Mod 26
    
    If Syo > 0 Then
        If CellColumnNo > 26 And Amari = 0 Then
            Str1 = Chr(Syo - 1 + 64)
        Else
            Str1 = Chr(Syo + 64)
        End If
        
        If Amari > 0 Then
            Str2 = Chr(Amari + 64)
        Else
            Str2 = Chr(90)
        End If
    Else
        Str1 = Chr(Amari + 64)
    End If
    
    CnvR1C1 = Str1 & Str2
End Function

4 使用例

以下の画像の通り、行数の英字を返します。


使いどころは、VBAで数式を直接代入するときです。

For k_row = 6 To 7
    For k_col = 3 To 14
        myCol = CnvR1C1(k_col)
        ActiveSheet.Cells(k_row, k_col) = "=IF(ISERROR(A売上!" & myCol & k_row & "/B売上!" & myCol & k_row & "),"""",A売上!" & myCol & k_row & "/B売上!" & myCol & k_row & ")"
    Next
Next

この例は、Cのシートの合計数値が、Aシート/Bシートの値になっています。
A,Bそれぞれのシートの値を持ってきたかったので、この関数を使ってみました。
変数myColに列数を求めています。
ちなみに「3~14」なので、列C~列Nです。

5 感想

この例は「同じテンプレートのExcelで項目が違うシート」という前提があります。
なので、各シートの同じ場所を参照すればいいのです。
しかし、数式を直接代入しようとすると、列の英字を求めることがネックになると思ったので使ってみました。
使い勝手は良いと思います。
ちなみに、コードの中身はわかっていません(;^ω^)
使えると思ったらご自由にどうぞ!

ではでは、この辺で(@^^)/~~~