- ベストアンサー
Excel2003 マクロのR1C1記録
基礎的な質問で恐縮ですが、マクロで記録すると普段良く見るA1というような記録ではなくR1C1という記録になってしまうのですが、これは「仕様」なのでしょうか? マクロ初心者なのですが、このような基本の決まりを理解するためにわかりやすいHPや本があれば教えてください。 「できるExcel VBA2003」は読んで一通り手順はわかったのですが、わからないことが多くて困っています。よろしくご指導ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最初に、こういう話は、関係ないと言う人もいるかもしれませんが、A1方式とR1C1方式とは、開発の時期は別で、当初、Lotus1-2-3(ViciCalc)をみて、Microsoft は一部は真似たようですが、Mac用で、C.シモニーが開発した時には、R1C1方式しかなかったのです。その後、Lotus1-2-3ユーザーを取り込むために、A1方式を採用しました。本来は、マクロでは、R1C1の仕様のほうが、その考え方を理解すると使いやすいのですし、VBAでは、機能的には、R1C1方式のほうに軍配が上がります。 しかし、ワークシート上では、R1C1方式は、常に起点になる場所をまず決めない見えてこないのです。 以下の場合は、合っているとも間違っているとも言えません。R1C1とA1方式では考え方が違うからです。 >ActiveCell.FormulaR1C1 = "=SUM(R[-6]C:R[-1]C)" > ↓ >ActiveCell.Formula = "=SUM(A1:A6)" もし、マクロを書くなら、絶対参照と相対参照を組み合わせて、このように書きます。 Range("A6").FormulaLocal ="=SUM(R1C1:R[-1]C)" それに、FormulaR1C1は、ほとんど使うことはありません。FormulaLocalは、互換モードでもあるので、A1方式もR1C1方式も入力が可能です。 Formulaの中では、FormulaLocal が一番使いやすいかと思います。いわゆる、Localの関数としては、JIS関数などがあります。 VBAプログラムを組むのでしたら、全体的には、記録マクロは、あまり依存しないほうが上達が早いはずですが、数式については、あまり深く考えないほうがよいです。R1C1でも、A1方式で、どちらでもよいのですが、なるべく数式入力のコードは置かないほうが良いようです。= VBA側のモードにもよりますが、ふつう、その数式の監視がなされてしまいますので、メモリに負担になりますから、一般的なマクロにするか、WorksheetFunction.Sum のようにしたほうが負担は少ないようです。 入門レベルで分からない部分は、CellsとRange, WorksheetとSheet, WindowとWorkbookなど、オブジェクトとして似ているものが多いので、分かりにくいと思います。こういう場合は、片方が必ず優先し、同位ではないのですが、同じように書かれてある教本は読まないことです。同位で覚えればよいと思ったら、半永久的に覚えられません。 ちなみに、Range, Worksheet, Workbook が優先します。Cells に関しては、ループなどでは、カウンターを代入しやすいのですが、多くの人は、A1方式に慣れているので、Range方式のほうが使いやすいのです。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
もん1冊読んだくらいでは当たり前。 それよりGoogleで「マクロの記録 R1C1」などで照会し http://officetanaka.net/excel/vba/tips/tips106.htm などを読んでから質問しては。 ほか ーー 使うほうからは Formulaで良いと思うが特殊例で FormulaLocal FormulaR1C1 FormulaR1C1Local などのプロパティを勉強し調べる手見たら。 実際はR1C1形式を気にしなくても良いと思う。もっと別に勉強することが沢山在る。 Microsoftは歴史的に自社創始のR1C1方式に思い入れがあり残しているようだが、普通はA1形式を使うと思う。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1410583394 の 「ツール]→[オプション]→[全般]タブにて「R1C1参照形式を使用する」のチェックを外す、もやってみてください。 左右できないはず。
お礼
ご回答ありがとうございました。参考になりました。
お礼
背景も含めた詳しいお話大変勉強になりました。 ご回答ありがとうございました。