为什么在Excel VBA中,非空单元格的Cells(x,y).Value返回空?

时间:2018-09-26 08:44:21

标签: excel vba excel-vba

我有一个Excel VBA功能。在循环中,我使用Cells(x,y).Value返回某些单元格的值。但是有时返回的是空的,即使单元格也不是空的。

工作表中的一个示例是Cells(11,4).Value。因此,我将Cells(11,4)Cells(11,4).Value都放在了手表中。

在“手表”中,向下钻取Cells(11,4)会显示文本为“ 42.71%”,而 Value2 为“ 0.42708218178176”期待。

而且在手表中,Cells(11,4).Value仍显示“空”。

更令人费解的是,如果我删除另一只手表,那么Cells(11,4).Value将会突然被填充!

enter image description here

显而易见的问题是:

  • 为什么?
  • 如何阻止Cells(11,4).Value返回空?

编辑后添加: VBA冗长且无关紧要(即,如果将其剥离回一行,则会得到相同的结果)。

最相关的是单元格D11(我感兴趣的单元格)中包含的公式。是这样的: = {(((D8+D9)/D5)^(1/(DATEDIF(D3,IF(D6>0,D6,LOOKUP(2,1/(D18:D9998<>""),$B18:$B9998)),"d")/365.25))-1)

IF函数返回两个可能的值:D6LOOKUP(2,1/(D18:D9998<>""),$B18:$B9998)。 (后者旨在从B列获取D列中的最后一个值。)

如果我在D6中放入一个值(因此IF语句不执行LOOKUP),则Cells.Value返回正确的结果。如果D6中没有值,并且IF语句返回LOOKUP公式,那么Cells.Value将返回Empty

1 个答案:

答案 0 :(得分:0)

我已经回答了第二个问题,“如何停止Cells(11,4).Value返回空?”。

如果我改变

LOOKUP(2,1/(D18:D9998<>""),$B18:$B9998)

LOOKUP(2,1/(D18:D999<>""),$B18:$B999)

然后问题解决了。 (顺便说一下,在1000-10000行中没有数据。我只是输入了很大的数字,以确保该公式将来仍可使用。)

我还没有回答我的第一个问题:“为什么?”。虫子?局限性?还有吗?