Excel で値ではなくセルの数式を参照しますか?

Excel で値ではなくセルの数式を参照しますか?

A1 に "=ROW()" があるとします。シートの最初の行なので、セルには '1' が表示されます。

ここで、A2 に「=A1」と入力します。残念ながら、これは数式ではなく、A1 の値を参照します。数式を参照した場合、A2 は代わりに「2」という値を返します (これが私の希望です)。

その後、A1 の数式を変更すると、A2 は A1 の数式に依存しているため、A2 の値も変更されます。

これについてどうすればいいでしょうか?

答え1

Excel ワークシート関数を使用してこれをネイティブに実行する方法はありません。この機能が必要な場合は、VBA を使用する必要があります。

Worksheet_Change() イベントを使用できます。これは、セルの内容が変更されたときに発生しますが、単純な再計算では発生しません。変更されたセルを示すパラメータがあり、これを使用して、何かを行う必要があるかどうかを確認できます。このコードは、使用しているワークシートのコード領域に配置する必要があります。(Alt+F11 で VBA を開き、左側のパネルでワークシートをダブルクリックします。「Microsoft Visual Basic -ファイル名- [シート名(タイトルバーに[(コード)]"と表示されます。)

当然のことながら、以下のコードで必要に応じてシート名と範囲を更新します。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim test As Range, src As Range, dest As Range

    Set src = Worksheets("Sheet1").Range("A1")
    Set dest = Worksheets("Sheet1").Range("A2")
    Set test = Intersect(Target, src)
    If Not (test Is Nothing) Then
        dest.Formula = src.Formula
    End If
End Sub

上記のコードは数式を正確にコピーします。セル A1 でセル F3 を参照すると、セル A2 にもセル F3 への参照が存在します。これが発生しないようにするには、If ステートメント内の行を に変更しますdest.FormulaR1C1 = src.FormulaR1C1。これにより、数式内の相対参照が適切に変更されます。

destセル A1 の数式に基づいて、複数のセルを一度に設定したい場合は、より大きな範囲に変更できます。

注意すべき点は、セルを変更しても、セル内の数式が自動的に復元されないことです。つまり、セルA2の数式を変更しても、自動的には元に戻りません。これは、セルA1が変更されたときにのみ更新が行われるためです。これを防ぎたい場合は、行を変更します。

Set test = Intersect(Target, src)

Set test = Intersect(Target, Union(src, dest))

答え2

これはテーブルを使用して実現できます (Excel 2007 以降では、範囲を選択してから [挿入] - [テーブル] を選択します)。最初の行にはタイトルを含める必要があります)
数式を変更すると、列全体が更新されます (または、列内の数式が変更前と同じでなかった場合は、更新するかどうかを尋ねられます)。

アップデート

ここテーブルに計算列を作成する方法について詳しく説明しています。
いずれかのセルの数式を変更すると、列全体が更新されます。(オフィスサポート)
そうでない場合は、[ファイル] - [オプション] - [文章校正] - [入力時にオートフォーマット] タブで [テーブルに数式を入力して計算列を作成する] がオンになっていることを確認してください。

関連情報