- 日時: 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
|