私はこのVBAコードを作成しようとしていますが、解決策を見つけることができませんでした。現在の行が5以下OR Excel VBA - 数式が書かれているセルを参照します。
- が同じ列に2列までのセルの値を取得します:
Iは、式を有する必要がありますセル、現在の行が6以上の場合
数式がセルE5に書き込まれている場合は、 E3の値を取得する必要があります。数式がセルE6に書き込まれる場合は、E5の値を取得する必要があります。次に、その値を状況に応じて他の数式の入力として使用するか、結果として使用します。
実は私はワークシートの数式を次のように私が望むものを達成することができる午前:
IF(ROW()>5; INDIRECT(ADDRESS(ROW()-1; COLUMN())); INDIRECT(ADDRESS(ROW()-2; COLUMN())))
これは単独で使用するとしたら、それはOKだったが、これは大きな、入れ子の一部になるだろうIFブロック。興味のある方は、作業ワークシートの数式は、ビットのように探しています:
=IF(LEFT($C5;2) = "RT"; IF(ROW()>5; INDIRECT(ADDRESS(ROW()-1;COLUMN()));
INDIRECT(ADDRESS(ROW()-2; COLUMN())))-$F5; IF(LEFT($C5;2)="DP"; IF(ROW()>5;
INDIRECT(ADDRESS(ROW()-1;COLUMN())); INDIRECT(ADDRESS(ROW()-2;
COLUMN())))+$F5; IF(VE($E5=P$4; LEFT($C5;2)="FR"); IF(ROW()>5;
INDIRECT(ADDRESS(ROW()-1; COLUMN())); INDIRECT(ADDRESS(ROW()-2;
COLUMN())))-$F5; IF(VE($E5=P$4; LEFT($C5; 2)="RV"); IF(ROW()>5;
INDIRECT(ADDRESS(ROW()-1; COLUMN())); INDIRECT(ADDRESS(ROW()-2;
COLUMN())))+$F5; IF(ROW()>5; INDIRECT(ADDRESS(ROW()-1; COLUMN()));
INDIRECT(ADDRESS(ROW()-2; COLUMN())))))))
あなたが見ることができるように、私は、全体のメンテナンスの悪夢で探しています。それを見ても、それは私がめまいになります。だから、私は、私は簡単にこのように書くことができると思ったVBAの式に言及したビットを移動することを決めた:
Function GETTOP()
If (ActiveCell.Row < 6) Then
GETTOP = CLng(ActiveCell.Offset(-2, 0).Value)
Else
GETTOP = CLng(ActiveCell.Offset(-1, 0).Value)
End If
End Function
私は、参照セルの値が数値でない場合、それはエラーが発生します知っているが、私はよ後でそれを扱う。
私は直接細胞に式を記述する場合、それは素晴らしい作品:
しかし、私はこの式を用いて細胞に影響を与える細胞を変更しようとすると、それは私のセルを参照しようと私は、関数内でActiveCell
を使用しておりますので、現在
を修正しています、それは自然にアクティブであるセルを参照しようとします。
ウェブで見つかったすべての解決策は、ActiveCell
アプローチを使用しています。これは、セルを直接編集すると効果的です。しかし、影響を受けるセルの1つが編集されると失敗します。
したがって、実際のセルに数式が書き込まれていることをどのように参照できますか?
や '(非配列数式用)Application.ThisCell' –
チャームのように働いた!ありがとう。私はまた、アプリケーションについて知りませんでした。揮発性関数、その1つの別のおかげで:) – SercioSoydanov
あなたは歓迎です、2回... – user3598756