EXCEL VBA勉強中の初心者です。


セルに計算式を入力するために、FormulaあるいはFormulaR1C1プロパティを利用する際、その計算式にプロシージャ内で使用している変数を含ませることはできるのでしょうか?

変数を利用する目的は、参照するワークシートやセルを条件によって変動させているからです。

このような場合の変数利用の可能性と、
もしできない場合には、代替案をお教えください。

回答の条件
  • 1人10回まで
  • 登録:2006/06/08 19:48:46
  • 終了:2006/06/08 21:43:06

ベストアンサー

id:gong1971 No.3

gong1971回答回数443ベストアンサー獲得回数682006/06/08 21:22:41

ポイント60pt
  • A1に =$B$1 を入力
  • A2に =B2*2 を入力
i=2
Range("A1").FormulaR1C1 = "=R1C" & i
Range("A2").Formula = "=B" & i & "*2"

こんな感じでしょうか?

もし具体的にご希望の内容などあれば、コメントにて教えてください。

id:kitatom

ありがとうございます!Formulaによる式代入の際の変数の利用法が理解できました。

2006/06/08 21:42:08

その他の回答(2件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/06/08 20:30:53

ポイント27pt

代替案ということで!

Excel2003で説明します。


■ユーザー定義関数で実現してみる!

1.VisualBasicEditor を起動する

2.標準モジュールを作成する

3.次のコードを記述

    Option Explicit

    Dim a As Integer 'たとえば123が入っているとする

    

    Function Hensu() As Integer

        Hensu = a  'ここにプロシージャ内で使用している変数をセット

    End Function


4.メニューから[挿入]-[関数...]を選択する。

  [関数の挿入]ダイアログが表示されるので、

  [関数の分類]項目から[ユーザー定義]を選択

  作成した関数[Hensu]を選択します。

  セルの数式はこんな感じになります: =Hensu()

  すると、セルに「123」が表示されます。

  このファンクションを利用してプロシージャ内で使用している変数を取得することができます。

  ですので、VBAのコードからFormulaR1C1を使用して数式をセットする場合、

  Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=Hensu() * 2 + 3"

  のように使用すればよいです。

  結果として、プロシージャ内で使用している変数を使用したような形になります。


[参考URL]

http://www.atmarkit.co.jp/fwin2k/win2ktips/437wsfunc/wsfunc.html

id:kitatom

ありがとうございます。たいへん参考になりました。

他の方法も引き続き募集いたします。

2006/06/08 20:40:57
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/06/08 20:47:05

ポイント27pt

再回答ですみません。

ちょっとボケていました。すみません。

Hensu() 関数で、パブリックな変数を返すように、記述しましたが、

ワークシートでこの、Hensu() 関数を参照しても、常に変数の初期値しか取得できないので、駄目でした。

変数の値は保持されないためです。


VBAの変数の内容をワークシートで参照したいのであれば、

変数の内容をワークシートのどこかのセルに書き出しておき、そこを数式で参照するようにすれば良いかと思います。

以上、説明になってますでしょうか?

id:kitatom

なるほど、たしかにおっしゃる方法で実現できそうですね。ただもう少しスマートに解決できるといいのですが。

2006/06/08 20:52:57
id:gong1971 No.3

gong1971回答回数443ベストアンサー獲得回数682006/06/08 21:22:41ここでベストアンサー

ポイント60pt
  • A1に =$B$1 を入力
  • A2に =B2*2 を入力
i=2
Range("A1").FormulaR1C1 = "=R1C" & i
Range("A2").Formula = "=B" & i & "*2"

こんな感じでしょうか?

もし具体的にご希望の内容などあれば、コメントにて教えてください。

id:kitatom

ありがとうございます!Formulaによる式代入の際の変数の利用法が理解できました。

2006/06/08 21:42:08
  • id:gong1971
    よかったです。参考までに下記のような書き方も可能です。

    Range("A3").Formula = "='Sheet" & i & "'!B3"
    Range("A4").Formula = "=" & Cells(4, i).Address

    #前者はワークシートの参照先を変更する方法
    #場合によって後者のように書いた方がすっきりすることもあります
  • id:kitatom
    フォローまでしていただきありがとうございました。
    こちらも、ぜひ試させていただきます。

    また、質問させていただく機会があると思いますので、
    その際もよろしくお願いいたします、

    このたびはありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません