自作関数 列を英字で求める。
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で項目が違うシート」という前提があります。
なので、各シートの同じ場所を参照すればいいのです。
しかし、数式を直接代入しようとすると、列の英字を求めることがネックになると思ったので使ってみました。
使い勝手は良いと思います。
ちなみに、コードの中身はわかっていません(;^ω^)
使えると思ったらご自由にどうぞ!
ではでは、この辺で(@^^)/~~~