Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで数式のコピー時に正しく相対参照させる

VBAで数式のコピー時に正しく相対参照させる

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「excel vba 数式 コピー 元セルを参照しないようにする」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel VBA(Visual Basic for Applications)を使って、セルに入力されている数式を他のセルへコピーする場合に、正しい相対参照の数式が入力されるようにするには、どうすればいいのかを探していた方による検索でしょう。

セル数式のコピーを、Range.Formulaプロパティを使って行ったことのない方は、そもそもどういう疑問・要望なのかをまず確認してみてください。

Formulaプロパティでコピーすると

例えば、C1セルに「=A1+B1」という数式を入力しておいてから、
  Range("C2").Formula = Range("C1").Formula
というコードを実行してみてください。

同種のデータが同じ列に入力されていることを想定すると、C2セルには「=A2+B2」という数式が入力されてほしいところですが、「=A1+B1」という、C1セルに入力されていた数式がそのままコピーされてしまいます。

[スポンサードリンク]

「excel vba 数式 コピー 元セルを参照しないようにする」
という検索をなさった方は、これを正しい相対参照の数式「=A2+B2」が入力されるようにするにはどうすればいいのかを探していたのだろうと、私は推測しています。

FormulaR1C1プロパティで数式をコピーするサンプル

こういう場合は、RangeオブジェクトのFormulaプロパティではなく、FormulaR1C1プロパティを使いましょう。
▼数式が正しく相対参照されるように数式をコピーするコード
Range("C2").FormulaR1C1 = Range("C1").FormulaR1C1

上記のように、Range.FormulaR1C1プロパティを使えば、正しく相対参照された形で数式がコピーされます。

Formulaプロパティで数式を一気に入力する

「excel vba 数式 コピー 元セルを参照しないようにする」
という検索をなさった方が、最終的にどのようなマクロを作ろうとしていたのかわかりませんから、これ以上のことは断言できませんが、数式のコピーを行う必要が本当にあるのだろうか、という点は気になります。

数式をコピーするのではなく、複数のセルに一気に入力する処理でOKならば、ここでご紹介したRange.FormulaR1C1プロパティよりも、Range.Formulaプロパティのほうがわかりやすい記述で済んでしまいます。

例えば、C1セルに「=A1+B1」C2セルに「=A2+B2」という数式を一気に入力する場合は、以下のコードでOKです。
▼数式を一気に複数セルへ入力するコード
Range("C1:C2").Formula = "=A1+B1"

上記のコードを実行すると、C2セルには「=A2+B2」という数式が入力されます。

これを、この記事でご紹介したRange.FormulaR1C1プロパティを使うと、
  Range("C1:C2").FormulaR1C1 = "= R[0]C[-2]+R[0]C[-1]"
という数式にする必要があります。

数式を一気に入力する場合は、Range.Formulaプロパティのほうが簡単だと感じていただけるはずです。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで数式のコピー時に正しく相対参照させる

「セル数式」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.