トップ > 玄人向け > Application.ConvertFormula

Application.ConvertFormula   2010.06.27

Application.ConvertFormulaメソッドは、A1 形式と R1C1 形式の変換、相対参照と絶対参照の変換、またはその両方の変換を行うときに使用します。

機能、使用例

機能:数式のセル参照を変換します
戻り値:バリアント型
構文:式.ConvertFormula(Formula, FromReferenceStyle, ToReferenceStyle, ToAbsolute, RelativeTo)

式は Application オブジェクトを表す変数です。

引数:(ヘルプより)

ToReferenceStyleは「オプション」と表示されており省略できますが、省略すると動作が安定しないようなので、指定したほうが良いでしょう。

Sub CFormula() '使用例:R1C1形式の数式をA1形式に変換し表示します。
    Dim varFormula As Variant
    varFormula = "=SUM(R10C2:R15C2)"
    MsgBox Application.ConvertFormula(varFormula, xlR1C1, xlA1)
End Sub

ConvertFormulaメソッドを検証

このメソッドを使用する中で、いくつか疑問が生じたので、検証を行いました。

文字列の変換は可能か

通常は数式の変換に使用するConvertFormulaメソッドですが、「=」を除いたR1C1形式の文字列を、A1形式に変換出来ないか検証を行いました。また、A1形式の文字列のR1C1形式への変換も検証を行いました。
結果、どちらも文字列からの変換が可能でした。
※「;」や「/」といった記号が含まれる場合はエラーになります。
※アルファベットは小文字でも変換されます。

Sub CFormula_Ex() 'R1C1形式の文字列を変換する
    Dim strData As String
    strData = "R2C2"
    MsgBox Application.ConvertFormula(strData, xlR1C1, xlA1) '結果は[ $B$2 ]
End Sub

複数参照(文字列)の一括変換が可能か

R1C1形式の文字列を複数個「,」でつなげ、まとめて変換出来るか検証。可能でした。

Sub CFormula_Ex2() 'R1C1形式の文字列を複数個「,」でつなげ、まとめて変換する
    Dim strData As String
    strData = "R2C2,R3C3,R4C4"
    MsgBox Application.ConvertFormula(strData, xlR1C1, xlA1) '結果は[ $B$2,$C$3,$D$4 ]
End Sub

全角の文字列の変換も可能か

アルファベットと数字が全角の場合は変換出来るのか、試したところ出来ました。

Sub CFormula_Ex3() '全角の文字列の変換する
    Dim strData As String
    strData = "R2C2,R3C3,R4C4" 'アルファベットと数字が全角
    MsgBox Application.ConvertFormula(strData, xlR1C1, xlA1) '結果は[ $B$2,$C$3,$D$4 ]
End Sub

一括変換出来る文字数の限界

R1C1形式の文字列を、どのくらいまでまとめて変換が可能か試したところ、255文字が限界でした。半角も全角も関係なく255文字までという結果でした。

【補足】
絶対参照と相対参照、A1形式とR1C1形式の様々な組み合わせで検証したところ、変換前の文字数は255文字が限界らしいことがわかりました。しかし、変換後の文字数も関係しているようで、変換後の文字数が約230文字(※)を超えるとエラーになるようです。
「相対参照→絶対参照」や「A1形式→R1C1形式」に変換する場合は、文字数が増えるので、この点にも気を付ける必要があります。

※詳しい原理はわかりませんでしたが、私の環境では、A1形式の絶対参照に変換する場合、変換後の文字列は234文字まで可能でした。同様にR1C1形式の絶対参照に変換の場合は233文字、R1C1形式の相対参照に変換の場合は240文字まででした。

Sub CFormula_Ex4() 'R1C1形式(254文字)をA1形式・相対参照へ変換
    Dim strData As String
    strData = "R1C1,R1C2,R1C3,R1C4,R1C5,R1C6,R1C7,R1C8,R1C9,R1C10" _
                & ",R1C11,R1C12,R1C13,R1C14,R1C15,R1C16,R1C17,R1C18" _
                & ",R1C19,R1C20,R1C21,R1C22,R1C23,R1C24,R1C25,R1C26" _
                & ",R1C27,R1C28,R1C29,R1C30,R1C31,R1C32,R1C33,R1C34" _
                & ",R1C35,R1C36,R1C37,R1C38,R1C39,R1C40,R1C41,R1C42" _
                & ",R1C43,R1C44" '254文字
    MsgBox Len(strData) '文字数
    MsgBox Application.ConvertFormula(strData, xlR1C1, xlA1, xlRelative)
End Sub

ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.