「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プロパティのほうが簡単だと感じていただけるはずです。
- Newer:Unionで複数のセルを選択するExcelマクロ
- Older:Findで見つけた他の列のセルを選択するExcelマクロ
Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで数式のコピー時に正しく相対参照させる