Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで一つ上の数式をコピーする

VBAで一つ上の数式をコピーする

対象:Excel 2010, Excel 2013, Windows版Excel 2016

VBAで一つ上の数式をコピーする

このサイトのアクセルログを眺めていて、
「ひとつ上 数式 コピー vba」
「excel2010 vba 一つ上のセル 数式 コピー」
という検索キーワードに気づきました。

[スポンサードリンク]

一つ上のセルとまったく同じ数式を複製するサンプルマクロ

以下のSubプロシージャを実行すると、アクティブセルに、一つ上のセルとまったく同じ数式が複製されます。
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プロシージャを実行すると、アクティブセルに一つ上のセルの数式が複製されます。
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プロパティの違いを確認しておきましょう。
Sub ローカルウィンドウで一つ上の数式を確認する()
 Dim rng As Range
 Set rng = ActiveCell.Offset(-1, 0)
 Stop
End Sub

上記のSubプロシージャを実行してStopステートメントでステップ実行になったら、拙著『いちばんやさしいExcel VBAの教本』でも多用している、ローカルウィンドウを、メニュー[表示]-[ローカルウィンドウ]から表示して、FormulaプロパティとFormulaR1C1プロパティでどのような「文字列」を取得できるか確認しておきましょう。

Formulaプロパティでは「=A1 + B1」という文字列が取得でき、

VBAで一つ上の数式をコピーする

この文字列をそのままアクティブセルに代入しているので、
  ActiveCell.Formula _
    = ActiveCell.Offset(-1, 0).Formula
では、まったく同じ数式の複製となります。

FormulaR1C1プロパティでは「=RC[-2] + RC[-1]」という文字列が取得でき、

VBAで一つ上の数式をコピーする

この相対参照の数式がアクティブセルに代入されるので、
  ActiveCell.FormulaR1C1 _
    = ActiveCell.Offset(-1, 0).FormulaR1C1
では、参照するセルが変化した形で数式が複製されます。

最終更新日時:2019-01-08 10:22

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル数式 » VBAで一つ上の数式をコピーする

「セル数式」の記事一覧

検索


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

.