• ベストアンサー

VBA 数式ではなく計算結果をセルに入れたい

毎度毎度お世話になります。 Office2003でのVBAに関しての質問です。 例えば、Sheet1のC3セルとSheet2のC3セルの合計をSheet3のC3セルに表示したい場合に現在下記のように記述しています。 Sheets("Sheet3").Range("C3").Select ActiveCell.FormulaR1C1 = "=SUM('Sheet1'!RC + 'Sheet2'!RC)" 結果、ちゃんとSheet1のC3セルとSheet2のC3セルの合計をSheet3のC3セルに表示できるのですがこれだとSheet1やSheet2のシート削除するとSheet3の値が崩れますよね。計算式をSheet3のセルに入れているのだから当たり前なんですが・・・ そこで、Sheet3のセルに値を入れる時に、計算式ではなく計算結果を入れたいのですがどのように書けばよいのでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 R1C1方式の便利な方法は活かして、 Sub TestSample()    With Sheets("Sheet3").Range("C3")   .FormulaR1C1 = "=SUM('Sheet1'!RC,'Sheet2'!RC)"   .Value = .Value  End With End Sub もっと多くのシートがある場合は、以下のようなスタイルになります。  .FormulaR1C1 = "=SUM('Sheet1:Sheet2'!RC)"

tree1975
質問者

お礼

ご回答有難うございます。 なるほど、跡で値だけ挿入しなおすのですね。 ただこれだと、数式は残りませんか?確かめてみます。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

#5 です。 >ただこれだと、数式は残りませんか? .Value = .Value は、基礎的なテクニックですから、良く覚えてくださいね。 Rangeオブジェクトのプロパティには、いくつかあります。 Formula プロパティと Valueプロパティとは、入力する時点では、同義ですが、出力の段階では、別です。これは、Text プロパテイに対しても同じです。他にも、FormulaLocal とFormula の違い、ValueとValue2 との違い、Text とValue の違いなど、ひとつずつ試しながら覚えるしかありません。FormulaR1C1は、通常は使いません。それは、数式が限定されるからです。それは、同じく、FormulaA1 も同じことです。 それから、経験的に、数式を大量に、VBE上では、抱えないほうがよいです。メモリ食いになります。今回のような場合は、ある意味特別です。VBAで、シートをループするよりも、かなり早く解が出るものだと思います。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.6

よく事情が呑み込めないのですが・・・ VBAでシートを指定して計算して、シートを削除すれば・・・当然、VBAを動作させた際も、エラーになります そのために、VBAを作るのではなく、コピー&形式貼り付けで、値を貼り付けた方が良いような気がするのですが・・・ テンプレートの様に使用して、保管する際は別のファイル名とかにするのでしょうか? もう少し補足を出したほうが良いような気がしますが?

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

Sub Macro1() Worksheets("Sheet3").Range("C3").Consolidate _ Sources:=Array("Sheet1!R3C3", "Sheet2!R3C3"), _ Function:=xlSum End Sub

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

Sub tes01() Sheet3.Range("C3") = Sheet1.Range("C3") + Sheet2.Range("C3") End Sub でもいいですね。

tree1975
質問者

お礼

ご回答有難うございます。 こんなやり方もあるのですね、Valueへ入れても、セル指定で入れても同じなのですね。 勉強になりました。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.2

#1です ActiveCell.Value = Sheets("Sheet1").Range("C3") + Sheets("Sheet2").Range("C3") の間違いです。

tree1975
質問者

お礼

ご回答有難うございます。 Valueプロパティに結果を入れ込めばよいのですね。 上手くいきました。有難うございます。

  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.1

こんにちは。 >"=SUM('Sheet1'!RC + 'Sheet2'!RC)" もともと、このSUM関数は意味がないと思います。 ActiveCell.FormulaR1C1 = "=Sheet1!RC + Sheet2!RC" でも同じ答えです。でもこれでは、数式が入力されてしまうので ActiveCell.Value = Sheets("Sheet1").Range("C1") + Sheets("Sheet2").Range("C1") に変更すればいいと思います。