![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
> ActiveCell.FormulaR1C1 = hiduke
それは、おそらく、マクロの記録を元にして、コードを編集する方法を解説しているのだと思います。
マクロの記録を相対参照で記録した場合は、セルに値を入力しただけで
ActiveCell.FormulaR1C1 = 値
のように.FormulaR1C1 プロパティで書かれます。
実際、標準的な記法として値の設定をする正しい記述は
ActiveCell.Value = hiduke
です。
ですから、本来は
> ActiveCell.FormulaR1C1 = hiduke
↑こういう使い方をするものではありません。
たぶん、
相対参照でのマクロ記録
↓
自分でコードを書き換えてみよう
(あまり煩いこと言わないから気楽に試してみよう)
というような場面でしか、あり得ない記述だと思います。
たぶん、そのセクションで覚えて欲しいと筆者が意図するところは
プロパティを操作してみよう
↓
変数を使ってみよう
↓
入力用にInputBoxを使ってみよう
という、いわば、オリエンテーリングのようなものだと思います。
つまり、その段階では、プロパティがどんなものであるか、ということよりも
自分で書いたコマンドが、ちゃんと、動く体験をしてもらって。、
次の説明に繋げよう、というようなものなのでしょう。
本に沿って学習してゆくお積りなら、今はあまり拘らないでいても良いのかも知れませんね。
(一応、書名、とかは、晒さない方向でお願いします。)
助かりました。
そういう観点からみると、うなづけます。
やっと解決しました。
ありがとうございます。
注意点・・・これからも気を付けて相談させて頂こうと思います。
本当にありがとうございました。
No.3
- 回答日時:
またまた、こんにちは。
#お邪魔します。メリット、というと、相対参照が容易に実現できるってことになると思います。
例えば、
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
No.2
- 回答日時:
オンラインヘルプ
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
No.1
- 回答日時:
使用するメリットはほとんど無いんじゃないでしょうか。
と、言いましたが、私はほとんど使ったことないのであくまで印象です。
FormulaR1C1でセル指定するメリットは、プログラムの中で取得した行番号と列番号によって、数式で参照するセル範囲を特定できるような場合だ、と以下のサイトに書いています。
moug
https://www.moug.net/tech/exvba/0050098.html
個人的にはA1形式で慣れており、A1形式で不自由がなくコーディングできてるので、
使わなくて良いなら使いたくないです。
同じコードにA1、R1C1が入り混じってるのは読み辛いでしょうし。
また、上記で挙げたメリットを生かせるようなプログラム組んだことがないので、
冒頭の通り、(私には)メリットを感じられないです
ご回答ありがとうございます。
まだ私は初歩の初歩でありまして、教本で勉強していまして
これは?と思い相談させて頂きました。
ご回答者さんの回答を読むと確かに必要性が薄く感じられました。
サイトも拝見させていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】甲子園での思い出の残し方
「球場の砂を持って帰る」はもう古いと思った高校球児が、甲子園で負けた際に、思い出に残そうと思って行ったこと
-
ActiveCell.FormulaR1C1の変数
Visual Basic(VBA)
-
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
セルをクリックすると付箋のようなものが表示されるのだが。
Excel(エクセル)
-
-
4
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
5
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
Excelで「20080707」を『2007/07/07』というスラッシュ付日付にするには?
Excel(エクセル)
-
8
VBAで文字列を数値に変換したい
Excel(エクセル)
-
9
EXCELのVBAでRange(A1:C4")を変数にする方法を教え"
Visual Basic(VBA)
-
10
エクセルVBA フォーム上でOnkeyがうまく出来ない
Excel(エクセル)
-
11
RC表示に変数を入れる
Visual Basic(VBA)
-
12
IF関数で空欄(")の時、Nullにしたい
その他(Microsoft Office)
-
13
別のシートを参照して計算する方法
Visual Basic(VBA)
-
14
【Excel】2つの値のどちらかを抽出する
Excel(エクセル)
-
15
エクセルVBAでロックをかけたい
Excel(エクセル)
-
16
vbaで参照設定
PowerPoint(パワーポイント)
-
17
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
18
VBAでオブジェクトがありません、となってしまう
Visual Basic(VBA)
-
19
Excelでデータ全通り組み合わせ出力方法
Excel(エクセル)
-
20
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貼り付けで複数セルに貼り付けたい
-
セルをクリック⇒そのセルに入力...
-
対象セル内(複数)が埋まった...
-
【エクセル】IF関数 Aまたは...
-
Excel 例A(1+9) のように番地の...
-
枠に収まらない文字を非表示に...
-
Excelで数式内の文字色を一部だ...
-
エクセルのセルの枠を超えて文...
-
エクセル オートフィルタで絞...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
セルの高さ(行高)を求めるには?
-
Excelでのコメント表示位置
-
エクセルの書式設定の表示形式...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセル 足して割る
-
EXCEL VBA セルに既に入...
-
(Excel)数字記入セルの数値の後...
-
【Excel】特定の文字から文字ま...
-
Excel2003 の『コメント』の編...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
エクセル 足して割る
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
セルをクリック⇒そのセルに入力...
-
対象セル内(複数)が埋まった...
-
エクセルのセルの枠を超えて文...
-
【Excel】 セルの色での判断は...
-
EXCEL VBA セルに既に入...
-
(Excel)数字記入セルの数値の後...
-
エクセル オートフィルタで絞...
-
Excel2003 の『コメント』の編...
-
エクセルの一つのセルに複数の...
-
枠に収まらない文字を非表示に...
-
セルに特定の色が付いていたら...
-
excelの特定のセルの隣のセル指...
-
excelのCOUNTIF関数で、『範囲=...
-
エクセル “13ヶ月”を“1年1ヶ月...
おすすめ情報