Sheet1、Sheet2、Sheet3の3つのワークシートを含むブックがあるとします。ワークシートSheet2の列A1には、数式= Sheet1!A1があります。その数式をSheet2からSheet3のセルA1にコピーしても、数式は引き続きSheet1を参照します。しかし、どうしてそれができるのでしょうか?セル参照のように、Excelがシート参照を調整しないのはなぜですか?

名前付き範囲と同様に、Excelはワークシート名を絶対値として扱います。各ワークシートオブジェクトは、ワークブック内の他のすべてのワークシートから独立しています。

シート参照を含む数式を貼り付けると、そのシート参照は貼り付けられた内容に変更されません。

できることがいくつかあります。 1つは、貼り付けた後で数式参照を変更して、正しいシートを参照するようにすることです。変更する数式が多数ある場合は、ターゲットワークシートのすべての数式を選択し(F5 |特殊|数式)、[検索と置換]を使用して元のワークシート名(Sheet1)を置き換えることができます

正しいワークシート名(Sheet2)を使用します。

参照のニーズが複雑でない場合は、マクロアプローチを使用できます。たとえば、特定のセルの数式で現在のシートの前のシートのセルを参照する場合は、マクロで簡単に行うことができます。次のマクロについて考えてみます。

Function PrevSheet(rCell As Range)

Application.Volatile     Dim i As Integer     i = rCell.Cells(1).Parent.Index     PrevSheet = Sheets(i - 1).Range(rCell.Address)

End Function

マクロは現在のワークシートを調べてから、その前にあるワークシートを特定します。次に、そのワークシートの参照が作成されます。

PrevSheetマクロを作成したら、セルで関数を使用する1つの方法を次に示します。

=PrevSheet(A1)

これにより、前のワークシートのセルA1の値が返されます。 Sheet1、Sheet2、およびSheet3があり、Sheet3でこの数式を使用すると、Sheet2!A1の値が返されます。前のシートがワークブックの最初のシートであるか、ワークシートではない場合、関数は#Valueエラーを返します。

後でこの数式を別のシート(たとえばシート5)にコピーすると、新しい場所を基準にして値がプルアップされます。つまり、Sheet4!A1から値がプルアップされます。

シート名を含めることもでき、関数は問題なく機能します:

=PrevSheet(Sheet3!A5)

sheet2はSheet3の前のシートであるため、このバージョンは常にSheet2!A5を返します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3088)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。