| 日時: 2012/05/29 11:22名前: VBレスキュー(花ちゃん)
 
************************************************************************************ カテゴリー:[エクセル][][]                                                      *
 * キーワード:Excel VBA,Excel2010,R1C1形式,A1形式,セル番地,行番,列番,列数,行数   *
 ***********************************************************************************
 '===================================================================================================
 '投 稿 日:2012.05.06
 '投 稿 者:VBレスキュー(花ちゃん)
 'タイトル:R1C1形式をA1形式に変換する関数及びその使用例
 '========1=========2=========3=========4=========5=========6=========7=========8=========9=========0
 同様の関数は今までも作っていたのですが、Excel 2007 以降は、列数の Max が 255 →16,384 列 に
 変更されたのに伴い、今まで使っていた関数では、702 列("ZZ")までしか対応できませんので、作り
 直しました。  旧の関数 http://www.hanatyan.sakura.ne.jp/dotnet/Excel07.htm#no3
 但し、18,278 列 ZZZ までの対応となっております。
 
 '--------------------------------------------------------------------------------------------------
 Private Sub Button14_Click(sender As System.Object, e As System.EventArgs) Handles Button14.Click
 'R1C1形式をA1形式に変換する関数の使用例
 Dim R1 As Integer = 10     '行番
 Dim C1 As Integer = 1378   '列番
 'Excel の裏に隠れたりしますので、オーナーウィンドウ(Me)を指定下さい。
 '結果 (10,1378) → ("AZZ10")
 MessageBox.Show(R1.ToString() & " , " & C1.ToString() & " = " & R1ToA1(R1, C1) & " です。")
 End Sub
 
 Private Function R1ToA1(ByVal r1 As Integer, ByVal c1 As Integer) As String
 'R1C1形式のアドレスをA1形式に変換する関数
 Dim s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 Dim A1 As String = ""
 If c1 < 1 Or c1 > 16384 Then
 MessageBox.Show("指定が間違っています。")
 A1 = "A1"
 Return A1
 End If
 If c1 <= 26 Then
 A1 = s.Chars(c1 - 1) & CStr(r1)
 ElseIf c1 <= 702 Then
 A1 = s.Chars(((c1 - 1) \ 26) - 1) & s.Chars(((c1 - 1) Mod 26)) & CStr(r1)
 Else
 A1 = s.Chars(((c1 - 703) \ 676)) & s.Chars((((c1 - 703) \ 26) Mod 26)) & _
 s.Chars(((c1 - 1) Mod 26)) & CStr(r1)
 End If
 Return A1
 End Function
 
 
 |