このサイトのアクセルログを眺めていて、
「ひとつ上 数式 コピー vba」
「excel2010 vba 一つ上のセル 数式 コピー」
という検索キーワードに気づきました。
一つ上のセルとまったく同じ数式を複製するサンプルマクロ
以下のSubプロシージャを実行すると、アクティブセルに、一つ上のセルとまったく同じ数式が複製されます。ActiveCell.Formula _
= ActiveCell.Offset(-1, 0).Formula
End Sub
例えば、C1セルに
= A1 + B1
という数式が入力されていて、C2セルがアクティブなときに、上記のSubプロシージャを実行すると、C2セルにまったく同じ数式
= A1 + B1
が入力されます。
RangeオブジェクトのOffsetプロパティの第1引数に「-1」、第2引数に「0」を指定した「ActiveCell.Offset(-1, 0)」という式で、アクティブセルの一つ上のセルを表すRangeオブジェクトを取得できます。
取得したRangeオブジェクトのFormulaプロパティで取得できた数式を、アクティブセルに代入しています。
一つ上のセルの数式を複製するサンプルマクロ
以下のSubプロシージャを実行すると、アクティブセルに一つ上のセルの数式が複製されます。ActiveCell.FormulaR1C1 _
= ActiveCell.Offset(-1, 0).FormulaR1C1
End Sub
C1セルに、
= A1 + B1
という数式が入力されていて、C2セルがアクティブなときに、上記のSubプロシージャを実行すると、C2セルに m
= A2 + B2
が入力されます。
考え方は、先のまったく同じ数式を複製するSubプロシージャと同じです。
違いは、Range.FormulaR1C1プロパティを使っている点です。
Range.FormulaR1C1プロパティで、C1セルに入力されている数式
= A1 + B1
が、
= RC[-2] + RC[-1]
という文字列として取得され、この数式がC2セルに入力されると
= A2 + B2
になったわけです。
一つ上のセルの数式をローカルウィンドウで確認しましょう
ローカルウィンドウで、一つ上のセルの数式を取得する、Range.FormulaプロパティとRange.FormulaR1C1プロパティの違いを確認しておきましょう。Dim rng As Range
Set rng = ActiveCell.Offset(-1, 0)
Stop
End Sub
上記のSubプロシージャを実行してStopステートメントでステップ実行になったら、拙著『いちばんやさしいExcel VBAの教本』でも多用している、ローカルウィンドウを、メニュー[表示]-[ローカルウィンドウ]から表示して、FormulaプロパティとFormulaR1C1プロパティでどのような「文字列」を取得できるか確認しておきましょう。
Formulaプロパティでは「=A1 + B1」という文字列が取得でき、
この文字列をそのままアクティブセルに代入しているので、
ActiveCell.Formula _
= ActiveCell.Offset(-1, 0).Formula
では、まったく同じ数式の複製となります。
FormulaR1C1プロパティでは「=RC[-2] + RC[-1]」という文字列が取得でき、
この相対参照の数式がアクティブセルに代入されるので、
ActiveCell.FormulaR1C1 _
= ActiveCell.Offset(-1, 0).FormulaR1C1
では、参照するセルが変化した形で数式が複製されます。
最終更新日時:2019-01-08 10:22
- Newer:データラベルに系列名を表示するExcelマクロ
- Older:Excelマクロ入門書籍をたくさん見て驚いた
Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで一つ上の数式をコピーする