• ベストアンサー

Excel VBAにて

FormulaR1C1の用途、または意味が分かりません。 ご経験者の方々、知識ある方の ご意見・アドバイスを頂ければ助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

> ActiveCell.FormulaR1C1 = hiduke それは、おそらく、マクロの記録を元にして、コードを編集する方法を解説しているのだと思います。 マクロの記録を相対参照で記録した場合は、セルに値を入力しただけで  ActiveCell.FormulaR1C1 = 値 のように.FormulaR1C1 プロパティで書かれます。 実際、標準的な記法として値の設定をする正しい記述は  ActiveCell.Value = hiduke です。 ですから、本来は > ActiveCell.FormulaR1C1 = hiduke ↑こういう使い方をするものではありません。 たぶん、  相対参照でのマクロ記録   ↓  自分でコードを書き換えてみよう  (あまり煩いこと言わないから気楽に試してみよう) というような場面でしか、あり得ない記述だと思います。 たぶん、そのセクションで覚えて欲しいと筆者が意図するところは  プロパティを操作してみよう   ↓  変数を使ってみよう   ↓  入力用にInputBoxを使ってみよう という、いわば、オリエンテーリングのようなものだと思います。 つまり、その段階では、プロパティがどんなものであるか、ということよりも 自分で書いたコマンドが、ちゃんと、動く体験をしてもらって。、 次の説明に繋げよう、というようなものなのでしょう。 本に沿って学習してゆくお積りなら、今はあまり拘らないでいても良いのかも知れませんね。 (一応、書名、とかは、晒さない方向でお願いします。)

this_love
質問者

お礼

助かりました。 そういう観点からみると、うなづけます。 やっと解決しました。 ありがとうございます。 注意点・・・これからも気を付けて相談させて頂こうと思います。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答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 プロパティを使うことが殆どです。 これが無いと困るものではありませんが、これを使った方が、 お行儀いい、とか、読む人に親切、というのはあるとおもいます。

this_love
質問者

補足

先ほどは有難うございました。 度々で申し訳ないのですが、下記のコードで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)
回答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」です。

this_love
質問者

補足

分かりやすいご説明ありがとうございます。 一点質問なのですが、 下記の文章で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が入り混じってるのは読み辛いでしょうし。 また、上記で挙げたメリットを生かせるようなプログラム組んだことがないので、 冒頭の通り、(私には)メリットを感じられないです

this_love
質問者

お礼

ご回答ありがとうございます。 まだ私は初歩の初歩でありまして、教本で勉強していまして これは?と思い相談させて頂きました。 ご回答者さんの回答を読むと確かに必要性が薄く感じられました。 サイトも拝見させていただきます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel VBAにて

    Activate と Select は通常、どう使い分けるものでしょうか? いまいち、使い分けが理解できません。 ご経験者の方々、知識ある方 アドバイス・ご意見を頂ければ助かります。 宜しくお願いします。

  • Excel VBAにて

    Msgboxの()の使い分けを教えてください。 かっこが必要な時、不要な時の区別がわかりません。 経験者の方々、知識ある方 アドバイスやご意見を頂ければ助かります。 よろしくお願いします。

  • EXCEL VBAの書き方

    EXCEL VBAの初心者です。 EXCEL2003を使っています。 数式の中のパラメータの書き方が分からず困っています。 具体的には、単純な計算をR1C1形式の数式を使い、FOR文でループを回そうとしました。 この際、例えば以下のようなVBAを、試行錯誤の結果やっと動くようにはなりましたが、とくに「"」(ダブルクォーテーション)の使い方が理解できていません。 NGだった理由、OKとなった理由を、すみませんがお分かりの方教えていただけないでしょうか。 (ヘルプを読んでも残念ながら理解できる程のレベルを持っていません。) やりたいこと:例えば単純な引き算を複数のセルに、ループをまわして設定したい。 --------------- Sub 質問() Dim i As Integer ' "A1"との差を求めるVBA→ "B2"から"E2"に数式入力 For i = 2 To 5 Cells(2, i).Select ' (1)問題の行→これはOKの例 ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[" & 1 - i & "]" Next i End Sub --------------- ' (2)問題の行→実行時エラー'1004' ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c[1 - i]" --------------- ' (3)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["1 - i"]" --------------- ' (4)問題の行→コンパイルエラー(構文エラー) ActiveCell.FormulaR1C1 = "=r[-1]c-r[-1]c["&1 - i&"]" ---------------

  • VBAにて

    質問です。 あるセルの色が指定色だった場合、あるセルの値を指定のセルに代入するVBAを 作りたいのですが、わかりません。 ご経験者、知識ある方々のご意見やアドバイスを お願いします。

  • VBAでエラーになってしまう

    初心者です。 RangeクラスのSelectメゾットが失敗しました。となります。 このコードは、マクロの記録を行い、そのコードをコマンドボタンのコードにコピーしたものです。 初心者なので、マクロの記録からやりました。 どうか、わかる方がいらっしゃいましたら、教えてください。 Private Sub CommandButton4_Click() Sheets("印刷ページ").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C6").Select ←ここが黄色くなり、エラーになります。 ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("F8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" End Sub

  • VBAにて

    初歩的な質問になりますが 下記の件で教えていただきたく投稿しました。 ご経験者、知識ある方々の知恵やアドバイスを頂ければ幸いです。 AとBは仮です (1) A=B と、A:=Bはどう違い、どのように使い分けするのでしょうか? (2) Value<>"" は、どういう意味なのでしょうか? よろしくお願いします。   

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • ExcelのVBAについて教えて下さい

    今、日報の作成をしているのですが 1行目に「1」を入れると、C列の3行目~15行目までがねずみ色になって 休みを意味するように条件付書式を設定しています。 しかし、1を入力というのも不細工だと思い、そのセルの上に コマンドボタンをおいて、 それを押すと下のセルに1が入力されるマクロを作ろうと思ったのですが、 1を入力するまでは良いんですが、 今度同じボタンでもう一度押すと消える、 さらにもう一度押すと1が入力される、 なんていうマクロは組めますか? マクロの記録で、下記のような式は得たのですが つなぎ方等々、分からない事ばかりで出来ません。 どなたか教えて下さい。お願いします。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Private Sub CommandButton1_Click() Range("D1").Select ActiveCell.FormulaR1C1 = "1" Range("D1").Select Selection.ClearContents End Sub

  • Excel VBA の基本画面にて

    昨日、コードウィンドウやプロジェクトエクスプローラ、プロパティウィンドウを 間違えて非表示にしてしまい、再表示して新たに勉強しているのですが 最初の固定画面にならず、何度も画面を操作しなければなりません。 元の画面を固定する方法はありませんでしょうか? (元の画面:参考に添付します) 経験者の方々、知識のある方 ご意見、アドバイス等を宜しくお願いします。 余談ですが コードを記入しては、 保存せずに再度EXCEL開いてはコードを入力する暗記方法で勉強しています。

  • VBAにて

    質問です。 入力したデータから入力範囲まで ある条件を超えたら(例えば 100超えたら セル色を黄色にする) セル色を変えるVBAを作りたいのですが 何故か?出来ません。 知識ある方々・ご意見ある方々のご意見やアドバイスを お願いします。 コードは下記に記入しました。 Private Sub 色付け_Click() Dim n1 As Variant Dim n2 As Variant Dim i As Variant n1 = Range("C3") n2 = Range("C3").End(xlDown) For i = n1 To n2 If i.Value >= 32000 Then i.Interior.ColorIndex = 38 End If Next i End Sub

このQ&Aのポイント
  • 【MFC-J6980CDW】で印刷する際、マゼンタのみ出力されません。インク切れのため途中で終了したことが原因です。シアンは交換したが、マゼンタはまだ出ていない色で印刷されています。プリンタのヘッドクリーニング機能を使用しても改善されませんでした。対応策を教えてください。
  • Win10で無線LAN接続しています。関連ソフトはパワーポイントです。ひかり回線を使用しています。ブラザー製品に関する質問です。
  • MFC-J6980CDWでマゼンタのみ出力されない問題が発生しています。印刷指示後離席し、インク切れのため途中で終了しました。シアンは交換済みですが、マゼンタが出ていません。ヘッドクリーニングを試しましたが改善されませんでした。Win10で無線LAN接続しており、パワーポイントを使用しています。ひかり回線を利用しています。
回答を見る

専門家に質問してみよう