Fórmula do Excel que retorna o endereço do precedente imediato da célula?

2

Como posso retornar o endereço do precedente direto de uma célula? E usá-lo em uma fórmula, como OFFSET () ou IF ()?

ou seja:

  • Célula com endereço de C1 aponta para a célula D30 (na mesma folha ou em outra na mesma pasta de trabalho)
  • CELL (C1) retorna C1, não D30, ÍNDICE (C1) retorna o valor de C1.
  • Range ("C1"). DirectPrecedent deve funcionar, mas não consigo colocá-lo em qualquer formato de trabalho.

Eu tentei criar uma função:

Function DirectPrecedent(rng As Range)
    Range(rng).DirectPrecedents
End Function

O que também parece não funcionar (mas eu não sei o VBA, então não estou surpreso).

Então, o que posso fazer para usar algo como:

  • OFFSET(DirectPrecedentOf(C1),0,3) - as colunas da célula 3 à direita de D30

  • ou: IF(DirectPrecedentOf(C1)=TODAY(),"YES","NO") - Se D30 = data de hoje, retorne "YES"

Isso é possível, se C1 aponta para D30, ou para "Sheet2"! D30?

EDIT: Tem sido sugerido que eu esclarecer por que eu preciso disso, então aqui está mais informações:

B1: OFFSET(DirectPrecedentOf(C1),0,3)
C1: 'Sheet2'!D30
'Sheet2'!D30:D40: List of dates
'Sheet2'!G30:G40: List of dollar amounts

Basicamente, eu quero algo como "Na coluna C, coloque a data da coluna 'Plan2'! D, Na célula B1, coloque o valor da célula três células à direita de qualquer célula que seja chamada na coluna C"

    
por Christiebunny 06.12.2017 / 07:21

1 resposta

2

Conforme meu conhecimento, não existe essa fórmula é Excel, poderia retornar Precedent & Endereço de célula dependente .

Mas posso sugerir o código VBA, que encontra o Precedente como o OP.

NB: Depois de executar este código, verifique a janela Immediate no Editor do VBA para o endereço de célula do Precedent.

Sub CommandButton1_Click ()

Dim rngToCheck As Range
Dim rngPrecedents As Range
Dim rngPrecedent As Range

Set rngToCheck = Range("A2:A10")

On Error Resume Next
Set rngPrecedents = rngToCheck.Precedents
On Error GoTo 0

If rngPrecedents Is Nothing Then
    Debug.Print rngToCheck.Address(External:=True) & _
                "Range has no precedents"
Else
    For Each rngPrecedent In rngPrecedents
        Debug.Print rngPrecedent.Address(External:=True)
    Next rngPrecedent
End If

End Sub

Observação O Excel pesquisará os precedentes do intervalo de dados A2: A10, que você pode definir conforme a sua necessidade.

Espero que isso ajude você. Eu publiquei esta solução depois de ter sido testada por mim.

    
por 06.12.2017 / 12:06