我试图编写一个自定义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