« 田沼晴彦:『Excelで遊ぶ手作り数学シュミレーション』 | トップページ | VBAにおいてRGB関数で色を指定する »

2009年12月31日 (木)

R1C1形式をA1形式に変換する

たびたび、R1C1形式をA1形式に変換することがあったので
R1C1形式をA1形式に変換するFuctionプロシージャを作ってみた。
作ったという程のものでもないんですが…

詳しくは、
VBAのヘルプで「ConvertFormula」で検索してみてください。 

まずは、下記のコードを標準モジュールにコピペしてください。

R1C1形式をA1形式に変換するFuctionプロシージャ

Function toA1(StrR1C1 As String)
'R1C1形式をA1形式に変換
    toA1 = Application.ConvertFormula( _
        Formula:=StrR1C1, _
        fromReferenceStyle:=xlR1C1, _
        toreferencestyle:=xlA1, _
        toabsolute:=xlRelative)
End Function

使い方ですが、toA1(StrR1C1)の「StrR1C1」の部分に
R1C1形式のString型を入れてください。

例1:とりあえずMsgBoxで使ってみる。

toA1使用例

Sub Macro091231a()
'toA1使用例
    MsgBox toA1("R1C1:R3C4")
End Sub

結果は、

Pic20091231b_2

です。

例2:Rangeプロパティで使ってみる。

Excel VBAでRangeプロパティを使うとき、R1C1形式は使えないのでR1C1形式をA1形式に変換する必要があります。

実は、このRangeプロパティのために
R1C1形式をA1形式に変換するFuctionプロシージャを作りました。

For文を入れ子して、変数 i, j など使って範囲を指定する場合
R1C1形式の方がわかりやすいので
R1C1形式を使おうとしたところ、
RangeはA1形式でないといけないようで
Range("R1C1:R3C4")などとするとエラーになりました。

そこで、私はRange(Cells(1,1), Cells(3,4)) の様にし始めました。
しかし、複数のシートやワークブックを使うようになると

絶対参照のほうが確実だなー

と思い、こんな感じに

WorkBooks("Book1.xls").Sheets("Sheet1").Range(Cells(1,1), Cells(3,4))

よく見るとCellsのところが相対参照になっちゃってるし…
そこまで絶対参照にすると分かりにくいし~

という流れで
R1C1形式をA1形式に変換するFuctionプロシージャにたどり着きました。

toA1使用例

Sub Macro091231b()
'toA1使用例
    Dim i As Integer
    Dim MyRange As String
   
    For i = 1 To 10
        MyRange = _
            toA1("R" & i & "C1:R" & i & "C" & i)
        Range(MyRange) = i
    Next i
   
End Sub

この例は
1行目に1を1列目まで
2行目に2を2列目まで

10行目に10を10列目のセルまで入れます。

Pic20091231a

実行するとこの様になります。

ascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> 

|

« 田沼晴彦:『Excelで遊ぶ手作り数学シュミレーション』 | トップページ | VBAにおいてRGB関数で色を指定する »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: R1C1形式をA1形式に変換する:

« 田沼晴彦:『Excelで遊ぶ手作り数学シュミレーション』 | トップページ | VBAにおいてRGB関数で色を指定する »