我試圖編寫一個自定義VBA代碼,但我找不到任何解決方案,而且這個解決方案正在逼我瘋狂。Excel VBA - 引用公式寫入的單元格
我需要有一個公式是:
- 獲取單元格的值兩排在同一列中,如果當前行是5或更低OR
- 獲取頂部相鄰的值單元格,如果當前行是6或更大
用普通英語,如果公式寫入單元格E5;它應該得到E3的價值。如果公式寫入單元格E6,那麼它應該得到E5的值。然後,我將使用該值作爲其他公式的輸入,或根據情況將其用作結果。
其實我能達到我想要做什麼用以下工作表公式:
IF(ROW()>5; INDIRECT(ADDRESS(ROW()-1; COLUMN())); INDIRECT(ADDRESS(ROW()-2; COLUMN())))
如果這是單獨使用,這是好的,但是這將是一個更大的嵌套的一部分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
方法,該方法在直接編輯單元時效果很好。但是當其中一個影響單元格被編輯時,它會失敗。
那麼,我怎樣才能引用公式寫入的實際單元呢?
或'Application.ThisCell'(非數組公式) –
像魅力一樣工作!謝謝。我也不知道應用程序。易揮發的功能,一個單獨的謝謝:) – SercioSoydanov
不客氣,兩次... – user3598756