2

セルが空の場合は、上のセルを調べます。そのセルが空の場合、空でないセルが見つかるまでその上のセルを調べます。その場合は、それを返す必要があります。というUDFになります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

関数は、セル自体が変更された場合にのみ再計算され、セルの上の範囲 (関数がスキャンする) を変更した場合には再計算されないことに注意してください。これに対処するには、関数が必要な範囲に設定する必要がある 2 番目のダミーパラメーターを追加します。再計算されるように監視します (簡単にするために列全体かもしれません)。

于 2012-07-11T21:34:33.147 に答える