2

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

这是一些伪:

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

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

4

3 回答 3

4

遵循 Siddharth 的最后建议,这里有一种解决方法。

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

更新

这可能是一个更好、更干净、更容易理解的解决方案。我测试了一下,但有人可能会破坏它!

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
于 2012-07-11T21:35:21.133 回答
3
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

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

于 2012-07-11T21:15:55.687 回答
0

UDF 将如下所示:

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

请注意,仅当 Cell 本身发生更改时才会重新计算该函数,而不是当您更改 Cell 上方的范围(函数扫描)时,为了解决这个问题,添加第二个虚拟参数,该参数应设置为您想要函数的范围监视要重新计算(为简单起见,可能是整个列)。

于 2012-07-11T21:34:33.147 回答