webdevqa.jp.net

現在のセルへのExcel参照

現在のセルへの参照を取得するにはどうすればよいですか?

たとえば、列Aの幅を表示する場合は、次を使用できます。

=CELL("width", A2)

ただし、式は次のようになります。

=CELL("width", THIS_CELL)
60
Steven

THIS_CELLという名前の数式を作成します

  1. 現在のワークシートで、セルA1を選択します(これは重要です!)
  2. Name Manager(Ctl + F3)を開きます
  3. New...をクリックします
  4. Name:に「THIS_CELL」(または単に「THIS」、これが私の好みです)を入力します
  5. Refers to:に次の式を入力します

    =!A1

    注:セルA1が選択されていることを確認してください。この式はActiveCellに関連しています。

  6. Scope:の下でWorkbookを選択します。

  7. OKをクリックして、Name Managerを閉じます

希望どおりにワークシートの数式を使用します

=CELL("width",THIS_CELL)

EDIT:INDIRECT()を使用するよりも優れたソリューション

次の2つの理由により、INDIRECT()関数を使用するソリューションよりも、ここで説明したソリューションの方が好ましいことに注意してください。

  1. INDIRECT()は揮発性のExcel関数であるため、不揮発性であるため、頻繁に使用するとワークブックの計算が劇的に遅くなります。
  2. それははるかに単純で、アドレスを(ROW()COLUMN()の形式で)アドレスへの範囲参照に変換し、再び範囲参照に戻す必要はありません。

EDIT:ワークブックスコープのシート依存の名前付き範囲の詳細については、 この質問 も参照してください。

EDIT:この考え方のバリエーションについては、以下の @ imixの答え も参照してください(RCスタイル参照を使用)。その場合、=!RC名前付き範囲の数式にTHIS_CELLを使用するか、単にRCを直接使用できます。

35
Rick Teachey

数年遅すぎる:

完全を期すために、さらに別の答えをしたいと思います。

まず、Excel-Options->Formulasに移動してR1C1参照。次に使用する

  =CELL("width", RC)

RCは常に現在の行、現在の列、つまり「このセル」を参照します。

Rick Teacheyの解 は、基本的にA1参照スタイルで同じことを可能にするための調整です( GSergのコメントも参照) ジョーイの答えとメモに 彼のコメント パトリックマクドナルドの答えに)。

乾杯
:-)

36
imix

使用できます

=CELL("width", INDIRECT(ADDRESS(ROW(), COLUMN())))
31

=ADDRESS(ROW(),COLUMN(),4)は、現在のセルの相対アドレスを提供します。 =INDIRECT(ADDRESS(ROW(),COLUMN()-1,4))は、現在のセルの左にあるセルのコンテンツを提供します=INDIRECT(ADDRESS(ROW()-1,COLUMN(),4))は、現在のセルの上のセルのコンテンツを提供します(積算合計の計算に最適)

CELL()関数を使用すると、最後に変更されたセルに関する情報が返されます。したがって、新しい行または列を入力すると、CELL()参照が影響を受け、現在のセルの参照ではなくなります。

26
andy

A2はすでに相対参照であり、セルを移動するか数式をコピーすると変更されます。

7
Joey

INDIRECT()なし:=CELL("width", OFFSET($A$1,ROW()-1,COLUMN()-1) )

5
Cosmin Rus
=ADDRESS(ROW(),COLUMN())
=ADDRESS(ROW(),COLUMN(),1)
=ADDRESS(ROW(),COLUMN(),2)
=ADDRESS(ROW(),COLUMN(),3)
=ADDRESS(ROW(),COLUMN(),4)
4
Sebasitankg

より安全で、アプリケーションの速度を低下させない、より良い方法があります。 Excelの設定方法では、セルに値または数式を設定できます。数式は独自のセルを参照できません。新しい値は別の計算を引き起こすため、無限ループになります..。ヘルパー列を使用して、他のセルに入力した値に基づいて値を計算します。例えば:

列AにはTrueまたはFalse、列Bには金額が含まれ、列Cには次の数式が含まれます:= B1

ここで、列AがTrueで列Bがゼロより大きい場合にのみ、列Bが条件付きフォーマットで黄色で強調表示されることを計算します...

= AND(A1 = True、C1> 0)

その後、列Cを非表示にすることを選択できます

1
Ester

これを処理する最良の方法は(私にとって)次を使用することです。

Dim MyString as String
MyString = Application.ThisCell.Address
Range(MyString).Select

お役に立てれば。

1
Barry LaBonte

テーブル内では[@]を使用できますが、(残念ながら)Excelは自動的にTable1[@]に展開されますが、機能します。 (Excel 2010を使用しています)

たとえば、2つの列[Change][Balance]がある場合、これを[Balance]列に入れます。

=OFFSET([@], -1, 0) + [Change]

もちろん、これは(他のほとんどのソリューションと同様に)行の順序に依存するため、少し壊れやすいことに注意してください。

1
Jannes

編集:Cell( "width")は最後に変更されたセルの幅を返すため、以下は間違っています。

Cell("width")は現在のセルの幅を返すため、現在のセルへの参照は不要です。ただし、必要な場合、cell("address")は現在のセルのアドレスを返します。したがって、現在のセルへの参照が必要な場合は、indirect(cell("address"))を使用します。ドキュメントを参照してください: http://www.techonthenet.com/Excel/formulas/cell.php

0
P. Myer Nore