アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎度毎度お世話になります。

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のセルに値を入れる時に、計算式ではなく計算結果を入れたいのですがどのように書けばよいのでしょうか?

A 回答 (7件)

こんにちは。



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)"
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/20 13:12

#5 です。



>ただこれだと、数式は残りませんか?
.Value = .Value は、基礎的なテクニックですから、良く覚えてくださいね。

Rangeオブジェクトのプロパティには、いくつかあります。
Formula プロパティと Valueプロパティとは、入力する時点では、同義ですが、出力の段階では、別です。これは、Text プロパテイに対しても同じです。他にも、FormulaLocal とFormula の違い、ValueとValue2 との違い、Text とValue の違いなど、ひとつずつ試しながら覚えるしかありません。FormulaR1C1は、通常は使いません。それは、数式が限定されるからです。それは、同じく、FormulaA1 も同じことです。

それから、経験的に、数式を大量に、VBE上では、抱えないほうがよいです。メモリ食いになります。今回のような場合は、ある意味特別です。VBAで、シートをループするよりも、かなり早く解が出るものだと思います。
    • good
    • 0

よく事情が呑み込めないのですが・・・



VBAでシートを指定して計算して、シートを削除すれば・・・当然、VBAを動作させた際も、エラーになります
そのために、VBAを作るのではなく、コピー&形式貼り付けで、値を貼り付けた方が良いような気がするのですが・・・

テンプレートの様に使用して、保管する際は別のファイル名とかにするのでしょうか?

もう少し補足を出したほうが良いような気がしますが?
    • good
    • 1

Sub Macro1()


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

Sub tes01()


Sheet3.Range("C3") = Sheet1.Range("C3") + Sheet2.Range("C3")
End Sub

でもいいですね。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/04/20 13:11

#1です


ActiveCell.Value = Sheets("Sheet1").Range("C3") + Sheets("Sheet2").Range("C3")

の間違いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/20 13:09

こんにちは。


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

ActiveCell.Value = Sheets("Sheet1").Range("C1") + Sheets("Sheet2").Range("C1")

に変更すればいいと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A