Prueba la siguiente:
Sub pasar_Valor()
'Por Dante Amor
'
Dim cel_destino As Range, rng_origen As Range, f As Range
Dim ultima As String, valor As Variant
'
Set rng_origen = Sheets("hoja1").Range("B1:B10") 'rango origen
Set cel_destino = Sheets("Principal").Range("D4") 'celda destino
'
ultima = rng_origen.Cells(rng_origen.Rows.Count, 1).Address
If cel_destino.Value = "" Then
'si la celda destino está vacía, entonces pone el primer valor
valor = rng_origen.Cells(1).Value
Else
Set f = rng_origen.Find(cel_destino.Value, , xlValues, xlWhole, , , False)
If f Is Nothing Then
'si el dato de la celda destino no existe en B1:B10, entonces pone el primer valor
valor = rng_origen.Cells(1).Value
Else
If f.Address = ultima Then
'si el dato encontrado es el último de rango, entonces pone el primer valor
valor = rng_origen.Cells(1).Value
Else
valor = f.Offset(1).Value
End If
End If
End If
cel_destino.Value = valor
End Sub