1

1 セル上または右に見える多くの数式を含むワークシートがあります。ctrl-D を使用して行を入力すると、数式が正しく更新されます (したがって、B2 の =B1 + A2 は B3 の =B2+A3 になります)。しかし、行の間に挿入すると、物事が混乱します(したがって、B3の上に行を挿入し、それをB4に移動すると、式が= B2 + A4になります。これは私が望むものではありません)

そこで、CellAbove と CellRight の数式を作成することを考えました (=CellAbove() + CellRight() と記述できるようにするため)。どうやってやるの?

私の試み:

Function CellAbove()
   CellAbove = [Address(Row() - 1, Column())].Value
End Function

動作しません。

更新: 以下の関数は機能しますが、それを持つセルは更新されません:

Function CellAbove()
   CellAbove = Range([Address(Row() - 1, Column())])
End Function

したがって、A1 に 2 があり、A2 に =CellAbove() がある場合、A2 には 2 が表示されます。しかし、A1 を 3 に変更しても、A2 には 2 が表示されます。

4

5 に答える 5

2

=INDIRECT("R"&ROW()-1&"C"&COLUMN(),FA​​LSE) は関数として機能します。

あなたがB2にいるとします。次に、括弧内のビットは R1C2 に評価されます。INIDRECT 関数は、行 1 列 2 にあるものを計算します (R1C1 スタイルのセル アドレスを使用していることを確認するには、FALSE が必要です)。

次を使用して、より簡単なことができると確信しています。

OFFSET(CurrentCell,-1,0)

しかし、現在のセルを参照する方法がわかりません。

于 2012-05-24T13:53:27.023 に答える
1

あなたの関数は機能していたので、必要なのは行を挿入するときに再計算することだけだったようです。あなたが言った:

「しかし、それを持つセルは更新されません」

ユーザー定義関数はデフォルトでは非揮発性であるため、自動的に再計算されません。既存の関数をこれに変更できます。

Function CellAbove()
 Application.Volatile (True)
 CellAbove = Range([Address(Row() - 1, Column())])
End Function

これはパフォーマンスに影響を与える可能性がありますが、あなたが求めているものと思われます。

于 2012-05-24T14:36:51.980 に答える
0

私のコメントのフォローアップ。これにはvbaは必要ありません:)

空白行を挿入した後

ステップ1

式を下にドラッグB2するB3か、単に選択B3して押しますCTL D

ステップ2

[セル] を選択しB3ます。セルの右下隅をダブルクリックしてオートフィルを実行します。

ここに画像の説明を入力

于 2012-05-24T14:03:00.780 に答える
0

あなたの機能

Function CellAbove()
   CellAbove = Range([Address(Row() - 1, Column())])
End Function

Function CellRight()
   CellRight = Range([Address(Row(), Column() + 1)])
End Function

と呼ばれることもある

Function test000000()
    ActiveCell = CellAbove + CellRight
End Sub
于 2012-05-24T13:53:12.020 に答える
0

次のように、INDIRECT、ADDRESS、ROW、COLUMN などの組み込みの Excel 関数を使用してこれを行うことができます...

=INDIRECT(ADDRESS(ROW()-1,COLUMN()))

...上のセル、または...

=INDIRECT(ADDRESS(ROW(),COLUMN()+1))

...右側のセル。

もう 1 つの方法は、組み込み機能を使用することですが、OFFSET 関数を使用することです。たとえば、セル B2 に式を入力できます...

=OFFSET(B2,-1,0)

...上のセル、または...

=OFFSET(B2,0,1)

...右側のセル。循環参照のように見えますが、同じセルの値を参照しているのではなく、そのアドレスのみを参照しているため、そうではありません。

いずれにせよ、各セルは基本的にそれ自体のみを参照するため、「Trace Dependents」機能と「Trace Precedents」機能を使用する能力が多かれ少なかれ失われます。

于 2012-05-24T13:59:27.257 に答える