SSブログ

Excelのアドレス形式を変換する方法(VBA&VB.NET) [プログラミング]

VBAでExcelを操作しているとセルのアドレス形式をA1形式からR1C1形式に変換したい事が良くある。
そんなときにはExcelの"ConvertFormula"関数を利用すると簡単に変換できる。

この関数は基本的に数式に含まれるセルのアドレス形式を変換するための関数なのだが、実はアドレス文字列を変換する事もできる。

簡単なサンプルを書いてみるとこんな感じだ。

------------------------------------------------------------

Private Function fncChangeReferenceStyle(ByVal pValue As String, ByVal pFromStyle As XlReferenceStyle, ByVal pToStyle As XlReferenceStyle) As String
        '*************************************
        'アドレス形式を変更
        '
        '   pValue              :   変更前アドレス形式の文字列
        '   pFromStyle          :   変更前アドレス形式
        '   pToStyle            :   変更後アドレス形式
        '
        '   Result              :   戻り値、変更後アドレス形式の文字列
        '
        '*************************************
       
        Dim strReturn As String
       
        strReturn = Application.ConvertFormula(pValue, pFromStyle, pToStyle, xlAbsolute)
       
        fncChangeReferenceStyle = strReturn

End Function

------------------------------------------------------------

上記のプロシージャに引数として「変換前のアドレス文字列」、「変換前アドレス形式」、「変換後アドレス形式」を渡してやると戻り値として「変換後のアドレス文字列」が返される。
つまり、変換前アドレス文字列に"B2"と渡して"R2C2"が返ってくるということ。
その逆に"R2C2"と渡して"B2"に変換する事も出来る。

上記はVBAの例だが、VB.NETの例は以下の通り

------------------------------------------------------------

    Private Function fncChangeReferenceStyle(ByVal pValue As String, ByVal pFromStyle As Excel.XlReferenceStyle, ByVal pToStyle As Excel.XlReferenceStyle) As String
        '*************************************
        'アドレス形式を変更
        '
        '   pValue              :   変更前アドレス形式の文字列
        '   pFromStyle          :   変更前アドレス形式
        '   pToStyle            :   変更後アドレス形式
        '
        '   Result              :   戻り値、変更後アドレス形式の文字列
        '
        '*************************************

        Dim strReturn As String
        Dim objApp As Excel.Application = Nothing

        Try
            objApp = DirectCast(objExcel.Application, Excel.Application)
            strReturn = objApp.ConvertFormula(pValue, pFromStyle, pToStyle, Excel.XlReferenceType.xlAbsolute).ToString

        Catch comex As COMException
            MsgBox(comex.Message, MsgBoxStyle.Exclamation)
            strReturn = ""

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation)
            strReturn = ""

        End Try

        Return strReturn

    End Function

------------------------------------------------------------

さて、これだけじゃチョット面白くないのでもう一ひねり。

上記のプロシージャを使って文字列"B2"を"R2C2"に変換すると言う事は変換前はA1形式で変換後はR1C1形式だ。
逆に文字列"R2C2"を"B2"に変換すると言う事は変換前はR1C1形式で変換後はA1形式R1C1形式だ。
同様に列Bを列2に変換するためにはどうすれば良いかというと、文字列"B:B"を渡してやると文字列"C2"が返ってくる。
行の場合は文字列"2:2"を渡してやれば文字列"R2"が返ってくると言うわけだ。
残念な事に文字列"B"を渡して"C2"とか文字列"2"を渡して"R2"と言うわけには行かない。
また、文字列"C2"や"R2"をA1形式に変換すると返ってくる文字列は"$B:$B"や"$2:$2"と絶対参照の形式で返ってくるので注意が必要だ。

チョットした事だが、結構便利に使えるので何かの役に立てて貰えるだろうか…。


タグ:VBA VB.NET
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。