• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルvbaのワークシート関数について)

エクセルVBAのワークシート関数について

このQ&Aのポイント
  • エクセルVBAのワークシート関数についての質問です。テキストなどでVBAのワークシート関数を使うとき、下の二つのコードのように使うことができますが、実行結果は異なりますか?
  • 下のコードを使用すると、セル範囲E3:E6にC3:D3の合計が入ります。また、セル範囲C6:D6にC3:C5の合計が入ります。
  • 上記のコードとは異なり、下のコードを使用すると、セル範囲E3:E6にC3:D3の合計が入ります。また、セル範囲C6:D6にC3:C5の合計が入ります。

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

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

あとでセルの値が変わった場合の問題はNo.1様が一応説明されたとして、ここでは結果の値が違うことについて説明いたします。 (質問者様の書かれたワークシートの値に区切り文字がないので値を把握するのに少し考え込んでしまいました・・・) > Range("C6:D6").FormulaLocal = "=SUM(C3:C5)" このやり方では、C6が=SUM(C3:C5)になるのはよいとして、D6が=SUM(D3:D5)になることは確認されたでしょうか。 当方もよく理解していないのでやや想像を交えて話をすると、Excel内部では数式はセルの相対位置で管理されていて、文字列を数式に代入する際に、=SUM(C3:C5)の中のセル参照であるC3:C5は、代入先の範囲の左上であるC6を基準として相対位置に変換され、「同じ列で3行上から1行上まで」となるると思われます。そして、セル範囲内のすべての数式がこの相対参照を使うことになるようです。 > Range("C6:D6").FormulaLocal = WorksheetFunction.Sum(Range("C3:c5")) こうすると、まずWorksheetFunction.Sum(Range("C3:c5"))が計算されます。 結果は30+10+30で70になります。そして、C6もD6も、数式(と値)は70になります。 これでD6の値は198にはならず70になることがおわかりいただけたでしょうか。

fookiti
質問者

お礼

丁寧な解説ありがとうございました。 Excel内部では、いろいろときまりごとがあるんですね。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> 両方同じように使っていいのでしょうか? 同じように使えるときと使えない場合があります。 どちらを使うべきかはケースバイケースですので、まずは要件を明確化することを行ってみては。 (たとえば、質問文のVBAを実行した後で、セルC3の値が変わったとき、セルC6、E3の値はどうなってほしいのかとか。)

fookiti
質問者

お礼

説明不足ですいませんでした。 ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう