- ベストアンサー
Excel VBAにて
FormulaR1C1の用途、または意味が分かりません。 ご経験者の方々、知識ある方の ご意見・アドバイスを頂ければ助かります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> ActiveCell.FormulaR1C1 = hiduke それは、おそらく、マクロの記録を元にして、コードを編集する方法を解説しているのだと思います。 マクロの記録を相対参照で記録した場合は、セルに値を入力しただけで ActiveCell.FormulaR1C1 = 値 のように.FormulaR1C1 プロパティで書かれます。 実際、標準的な記法として値の設定をする正しい記述は ActiveCell.Value = hiduke です。 ですから、本来は > ActiveCell.FormulaR1C1 = hiduke ↑こういう使い方をするものではありません。 たぶん、 相対参照でのマクロ記録 ↓ 自分でコードを書き換えてみよう (あまり煩いこと言わないから気楽に試してみよう) というような場面でしか、あり得ない記述だと思います。 たぶん、そのセクションで覚えて欲しいと筆者が意図するところは プロパティを操作してみよう ↓ 変数を使ってみよう ↓ 入力用にInputBoxを使ってみよう という、いわば、オリエンテーリングのようなものだと思います。 つまり、その段階では、プロパティがどんなものであるか、ということよりも 自分で書いたコマンドが、ちゃんと、動く体験をしてもらって。、 次の説明に繋げよう、というようなものなのでしょう。 本に沿って学習してゆくお積りなら、今はあまり拘らないでいても良いのかも知れませんね。 (一応、書名、とかは、晒さない方向でお願いします。)
その他の回答 (3)
- cj_mover
- ベストアンサー率76% (292/381)
またまた、こんにちは。#お邪魔します。 メリット、というと、相対参照が容易に実現できるってことになると思います。 例えば、 Sheet2に数式を設定する時、Sheet1の同じ位置にあるセルを参照したいなんて場合 B2 : =Sheet1!B2*1.05 E5 : =Sheet1!E5*1.05 みたいに、セル参照を指定する必要がある”A1形式”に比して ”R1C1形式”では =Sheet1!RC*1.05 という数式一個で賄えるという利点はあります。 具体的なVBA記述としては Sub Re7740084_R1C1() Sheets("Sheet2").Range("B2,E5").FormulaR1C1 = "=Sheet1!RC*1.05" End Sub となります。 ただし、実際は”A1形式”で指定しても一種類の数式には違いありません。 Sub Re7740084_A1() Sheets("Sheet2").Range("B2,E5").Formula = "=Sheet1!B2*1.05" End Sub でも、相対的に同じ位置にある時は、セル番地を確認しなくても "RC"だけで指定できるのは、私は便利だと思います。 教科書では教えてくれない、というか、Microsoftは推奨しませんが 実は以下のようなコードでも同じ結果が得られます。 Sub Re7740084_R1C1_2() Sheets("Sheet2").Range("B2,E5").Formula = "=Sheet1!RC*1.05" End Sub Sub Re7740084_R1C1_3() Sheets("Sheet2").Range("B2,E5").Value = "=Sheet1!RC*1.05" End Sub だったら、.FormulaR1C1 プロパティなんて要らない、と思われるかも知れません。 私自身は、「この数式は相対参照で書いてますよ」と一目見て解るように 明示的にする意味で.FormulaR1C1 プロパティを使うことが殆どです。 これが無いと困るものではありませんが、これを使った方が、 お行儀いい、とか、読む人に親切、というのはあるとおもいます。
補足
先ほどは有難うございました。 度々で申し訳ないのですが、下記のコードでFormulaR1C1は何を意味しているのでしょうか? ご回答いただければ助かります。 よろしくお願いします。 教本の一部抜粋 ActiveCell.FormulaR1C1 = hiduke ←変数名 ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("得意先コードを入力してください") ActiveCell.Offset(0, 2).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("商品コードを入力してください") ActiveCell.Offset(0, 4).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("数量を入力してください") ActiveCell.Offset(1, -7).Range("A1").Select
- okormazd
- ベストアンサー率50% (1224/2412)
オンラインヘルプ FormulaR1C1 プロパティ 指定されたオブジェクトの数式を R1C1 形式で、コード記述時の言語で設定します。値の取得および設定が可能です。Range オブジェクトの場合はバリアント型 (Variant) の値を使用します。Series オブジェクトの場合は文字列型 (String) の値を使用します。 解説 セルに定数が含まれているときには、その定数がそのまま返されます。セルが空のときには、空の文字列が返されます。セルに数式が含まれるときには、数式バーの表示と同じ形式の文字列で (等号も付加されます)、その数式が返されます。 セルの値や数式を日付に設定すると、そのセルが日付や時刻の書式になっているかどうかが確認されます。日付や時刻の書式になっていないときは、既定の日付の形式に変更されます。 対象セル範囲が 1 次元または 2 次元のセル範囲のときは、同じ次元を持つ Visual Basic の配列から各セルの数式を設定できます。同様に、各セルの数式を Visual Basic の配列に代入することもできます。 セル範囲に対して数式を設定すると、範囲内のすべてのセルに同じ数式が設定されます。 使用例 次の使用例は、シート 1 のセル B1 に数式を設定します。 Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=SQRT(R1C1)" R1C1形式での数式の設定や取得に便利です。 A1形式の場合は、「Formula」です。
補足
分かりやすいご説明ありがとうございます。 一点質問なのですが、 下記の文章でFourmuraR1C1は何を意味しているのでしょうか? また数式の設定OR取得が必要だからなのでしょうか? ご回答いただければ助かります。よろしくお願いします。 教本の一部抜粋 ActiveCell.FormulaR1C1 = hiduke ←変数名 ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("得意先コードを入力してください") ActiveCell.Offset(0, 2).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("商品コードを入力してください") ActiveCell.Offset(0, 4).Range("A1").Select ActiveCell.FormulaR1C1 = inputbox("数量を入力してください") ActiveCell.Offset(1, -7).Range("A1").Select
- aihara003
- ベストアンサー率0% (0/4)
使用するメリットはほとんど無いんじゃないでしょうか。 と、言いましたが、私はほとんど使ったことないのであくまで印象です。 FormulaR1C1でセル指定するメリットは、プログラムの中で取得した行番号と列番号によって、数式で参照するセル範囲を特定できるような場合だ、と以下のサイトに書いています。 moug https://www.moug.net/tech/exvba/0050098.html 個人的にはA1形式で慣れており、A1形式で不自由がなくコーディングできてるので、 使わなくて良いなら使いたくないです。 同じコードにA1、R1C1が入り混じってるのは読み辛いでしょうし。 また、上記で挙げたメリットを生かせるようなプログラム組んだことがないので、 冒頭の通り、(私には)メリットを感じられないです
お礼
ご回答ありがとうございます。 まだ私は初歩の初歩でありまして、教本で勉強していまして これは?と思い相談させて頂きました。 ご回答者さんの回答を読むと確かに必要性が薄く感じられました。 サイトも拝見させていただきます。 ありがとうございました。
お礼
助かりました。 そういう観点からみると、うなづけます。 やっと解決しました。 ありがとうございます。 注意点・・・これからも気を付けて相談させて頂こうと思います。 本当にありがとうございました。