我将如何获得列中的第一个非空单元格?

如果一个单元格是空的,我希望它在上面的单元格中查找。 如果那个是空的,它将在上面的单元格中查找,直到find一个非空的单元格。 当它这样做,它应该返回它。 这将是一个叫做loopUp的UDF。 然后,当我在一个像这样的单元格公式中使用它时: =loopUp(D24) ,范围D18:D24是空的,它将显示D17中的内容。

这是一些Psuedo:

 Function loopUp(Cell) while Cell is empty Cell becomes cell above return cell 

我是VBA新手。 我坚持的东西是如何传递一个单元格的地址,而不是它的价值。

按照Siddharth最后的build议,这是一个解决的办法。

 Function LoopUp(rng As Range) As Variant Dim intCnt As Long LoopUp = "Nothing found" For intCnt = rng.Row To 1 Step -1 If Not IsEmpty(Cells(intCnt, rng.Column)) Then LoopUp = Cells(intCnt, rng.Column) Exit For End If Next End Function 

UPDATE

这可能是一个更好,更清晰,更容易理解的解决scheme。 我testing了一下,但有人可能会打破它!

 Function LoopUp(rng As Range) As Variant If Not IsEmpty(rng) Then LoopUp = rng Else If rng.End(xlUp).Row = 1 Then LoopUp = "Nothing found" Else LoopUp = rng.End(xlUp) End If End Function 
 Function LoopUp(rng as Range) With rng.Cells(1) If Len(.Value) > 0 Then Lookup = .Value Else LoopUp = .End(xlUp).Value End If End With End Function 

编辑:有一些讨论周围如果没有“非空”单元格传递的参数上面会发生什么。 由于OP没有指定应该发生什么,这只是返回一个空的响应。

UDF将如下所示:

 Function loopUp(Cell) Do While IsEmpty(Cell) Set Cell = Cell.Offset(-1) Loop loopUp = Cell End Function 

请注意,只有当单元格本身发生变化时,才会重新计算该函数,而不是在更改单元格(函数扫描的)之上的范围时,才会重新计算该函数。为了应对这个问题,需要添加第二个虚拟参数,并将其设置为您想要的函数范围监视重新计算(为简单起见,也许是整列)。