コピーすると数式はなぜ「ずれる」のか

LWP | コピーすると数式はなぜ「ずれる」のか

コピーすると数式はなぜ「ずれる」のか

A1形式とR1C1形式で見る、変わる参照先と変わらない距離

Copyright © 2026 LWP 山中 一弘

本資料は、出典を明記いただければ、商用・非商用を問わず、ご自由に複製・改変・再配布していただけます。なお、著作権表示は改変せず、そのまま記載してご利用くださいますようお願いいたします。

ストーリー

「下の行も、同じ式でお願いできる?」。ナマズさんの依頼に、フナさんが数式をコピーします。計算結果は合っているのに、式に書かれたセルの住所が変わっている。ナマズさんは気になって、参照先を固定できないかと考えます。

これは、小さな確認用シートを囲む架空の職場の一幕です。扱うのは同じシート内での通常のコピー。切り取りによる移動や、行・列の挿入とは分けて考えます。

1 下にコピーしたら、参照先が変わった

A2に10、B2に1、A3に20、B3に2を入力した小さなシートです。C列で、その行の二つを足します。

C2の=A2+B2をC3へ通常コピーすると=A3+B3になり、結果は11と22。ナマズさんは参照先の変化に気づく。

図1|参照先は実際に変わります。その変化が計算の目的に合っているかを、ここから確かめます。

2 変わらないのは、セルまでの距離

住所の文字列から少し離れて、数式を置くセルと参照先との位置関係を見てみます。

C2からA2とB2、C3からA3とB3は、いずれも同じ行の二列左と一列左。C2をD2へコピーすると=B2+C2となる。

図2|下へコピーしても、右へコピーしても、相対参照が保つのは数式セルからの距離です。

3 R1C1は、行と列の距離を読める

左へたどる道順を、RとCを使って書いてみます。行と列を分けて読むと、記号の意味が見えてきます。

Rは行、Cは列。RC[-2]は同じ行の二列左、RC[-1]は一列左。負の距離は上や左、正の距離は下や右を表す。

図3|R・Cの数字を省略すれば同じ行・同じ列。角括弧内の数で相対距離を表します。

4 距離は、数式を置くセルから測る

今度はC5に数式を置き、A1を参照します。距離の起点をC5に決めてから読みましょう。

C5からA1は四行上・二列左なので、=A1は=R[-4]C[-2]。=R1C1なら行1・列1を固定する絶対参照になる。

図4|同じA1を指していても、相対距離で書くか、行・列番号を固定して書くかは別の選択です。

5 全部固定すると、各行の合計にはならない

「住所が変わらなければ安心」と考えたナマズさん。確認用の式を絶対参照にして、下の行へコピーします。

=$A$2+$B$2をC2からC3へコピーすると、どちらもA2とB2を参照し、結果は11。各行の値を足す目的には合わない。

図5|絶対参照は正しく固定できています。問題は、固定した対象と欲しかった計算が一致していないことです。

6 列だけ固定すると、行は動ける

全部を固定する以外にも選び方があります。ここからは、C5を右に一列・下に一行のD6へコピーして比べます。

C5の=$A1をD6へコピーすると=$A2。列Aを保ちながら行が変わる。C5のR1C1表記は=R[-4]C1。

図6|列記号の直前に$を置けば列だけ固定。行の相対距離は保たれるため、参照先はA1からA2へ動きます。

7 行だけ固定すると、列は動ける

同じC5→D6のコピーで、今度は$を行番号の直前へ置いてみます。

C5の=A$1をD6へコピーすると=B$1。行1を保ちながら列が変わる。C5のR1C1表記は=R1C[-2]。

図7|行番号の直前に$を置けば行だけ固定。列だけ固定する場合と合わせて、複合参照と呼びます。

8 四つの参照を、同じコピーで比べる

式を置くセルとコピー先をそろえると、違いを比較できます。表の四行は、C5へ一つずつ式を入れて試す独立した例です。

C5からD6へコピーした四種類の比較。=A1は=B2、=$A$1は同じ、=$A1は=$A2、=A$1は=B$1。各式をR1C1でも対照する。

図8|A1形式とR1C1形式は表記方法の違いです。どちらの形式でも、相対・絶対・複合参照を表せます。

9 同じ規則は、VBAでもまとめて渡せる

ここからは同じ考え方の応用です。マクロでは、数式を置く範囲へR1C1形式の計算規則をまとめて渡せます。

FormulaR1C1へ=RC[-2]+RC[-1]を渡してC2:C3へ設定すると、A1形式では=A2+B2と=A3+B3になり、結果は11と22。

図9|画面の参照形式を切り替えなくても、FormulaR1C1にはR1C1形式で式を渡せます。

10 「同じ式」より、「何を同じにするか」

参照の仕組みが分かったところで、最初の依頼へ戻ります。ナマズさんが必要としていた「同じ」は、何だったのでしょうか。

各行で同じ計算をするという目的に戻り、相対参照の式でC2は11、C3は22。ナマズさんは何を同じにしたいかも伝えると約束する。

図10|同じ位置関係か、同じセルか、同じ行・列か。欲しい動きを先に決めると、参照の選び方が明確になります。

まとめ

コピーで参照先が変わること自体は、数式の誤りではありません。相対参照は数式セルからの距離を保ち、絶対参照は指定した行・列を保ちます。複合参照なら、その一方だけを固定できます。「同じ式」と頼む前に、どの位置関係やセルを同じにしたいかを決め、コピー先の参照先と結果を確かめましょう。

今回の仕掛け

A1形式とR1C1形式は、参照の表記方法です。A1形式でも相対参照を表せますし、R1C1形式でも絶対参照を表せます。表記方法と、どの行・列を固定するかを分けて考えるのが今回のポイントです。

R1C1形式の角括弧内は相対距離、括弧のない数字は行・列番号です。数を省略したR・Cは同じ行・同じ列を表します。相対距離は、数式を置くセルが決まって初めて参照先を特定できます。たとえばC5からA1を相対参照する式は、=R[-4]C[-2]です。

ここでいう「固定」は通常のコピーに対する性質です。切り取りによる移動、行・列の挿入、外部参照、テーブルの構造化参照は今回の範囲に含めません。これらの操作でも数式の文字列が一切変わらない、という意味ではありません。

今回の数式・コードサンプル

数式例 1 各行の二つの値を足す

01

=A2+B2

数式の説明

この式をC2に置くと、同じ行のA2とB2を足します。C2のセルをコピーしてC3へ貼り付けると、参照先がA3とB3に変わります。

入力・概要

新しいシートのA2に10、B2に1、A3に20、B3に2を入力します。上の数式だけをC2へ入力し、確定後にC2をコピーしてC3へ貼り付けます。数式バーの文字列だけを複製する操作とは区別してください。

結果

C2:=A2+B2 → 11

C3:=A3+B3 → 22

読むポイント

右隣のD2へコピーすれば、式は=B2+C2となり結果は12です。下方向でも右方向でも、「同じ行の二列左と一列左」という位置関係が保たれます。

数式例 2 距離で書いた足し算

01

=RC[-2]+RC[-1]

数式の説明

RC[-2]は同じ行の二列左、RC[-1]は同じ行の一列左です。この式は、数式例1のC2とC3のどちらにも対応します。

入力・概要

数式例1のシートを使います。Windows版Excelで[ファイル]→[オプション]→[数式]→[R1C1参照形式を使用する]をオンにすると、C2とC3に相当するセルは行2・列3と行3・列3になります。両セルの数式バーを比べてください。上の式を直接試す場合も、この表示設定で入力します。

結果

行2・列3:=RC[-2]+RC[-1] → 11

行3・列3:=RC[-2]+RC[-1] → 22

読むポイント

表記を切り替えても参照先や計算結果を変える操作にはなりません。確認後はチェックをオフに戻すと、A1形式で読めます。

数式例 3 C5からD6へ、四つの参照を比べる

01

=A1

02

=$A$1

03

=$A1

04

=A$1

数式の説明

01は行も列も相対、02は両方を固定、03は列Aだけ固定、04は行1だけ固定です。ドル記号は、その直後の列記号または行番号を固定します。

入力・概要

A1形式で、新しいシートのA1に100、B1に200、A2に10、B2に1を入力します。上の四行は独立した比較例です。一行ずつC5へ入力し、その都度C5のセルをD6へコピーしてください。四行まとめて縦に貼り付ける例ではありません。

結果

行も列も相対(01):C5の=A1 → D6では=B2、結果1

行も列も固定(02):C5の=$A$1 → D6では=$A$1、結果100

列だけ固定(03):C5の=$A1 → D6では=$A2、結果10

行だけ固定(04):C5の=A$1 → D6では=B$1、結果200

読むポイント

C5を基準にR1C1で書くと、01は=R[-4]C[-2]、02は=R1C1、03は=R[-4]C1、04は=R1C[-2]です。R1C1の相対距離は、数式を置くセルを決めてから読みます。

サンプルコード 同じ計算規則をC2:C3へ設定する

01

Public Sub SampleRelativeFormula()

02

    With ThisWorkbook.Worksheets(1)

03

        .Range("C2:C3").FormulaR1C1 = "=RC[-2]+RC[-1]"

04

        .Range("C2:C3").Calculate

05

        Debug.Print .Range("C2").Formula

06

        Debug.Print .Range("C3").Formula

07

    End With

08

End Sub

コードの説明

FormulaR1C1に「同じ行の二列左と一列左を足す」という規則を渡し、C2:C3へまとめて設定します。Calculateで再計算し、FormulaでA1形式の式を取り出してイミディエイトウィンドウへ表示します。

入力・概要

新しいマクロ有効ブックの一枚目にA2=10、B2=1、A3=20、B3=2を入力します。そのブックの標準モジュールへコード全体を貼り付け、SampleRelativeFormulaを実行します。ThisWorkbookはコードを保存したブックを指し、C2:C3の内容は数式で置き換わります。TakiLibは不要です。

結果

イミディエイトウィンドウには=A2+B2、=A3+B3が順に表示されます。セルの計算結果はC2が11、C3が22です。

読むポイント

FormulaR1C1が受け取るのはR1C1形式の式です。画面全体をR1C1表示に切り替える必要はありません。数式例2の表示設定の切り替えとは、別の操作です。

出典メモ

参照の指定はMicrosoft Support:相対・絶対・複合参照の切り替え、R1C1表記はExcelの数式の概要、表示設定はMicrosoft Learnの解説、VBAの設定はRange.FormulaR1C1を参照。2026年9月9日確認。

掲載例の数式・R1C1表記・値は、Windows版Excelの新規検証ブックで照合済みです。会話と職場の場面は創作です。