
Gostaria que as células C5-C39 preenchessem automaticamente a data de hoje sempre que os dados fossem inseridos nas células B5-B39.
Tentei fazê-lo funcionar, =TODAY()
mas não sei como estruturar a fórmula.
Responder1
Eu diria que a maneira mais simples de fazer isso seria com uma função definida pelo usuário. Essa função será atualizada quando qualquer célula referenciada for alterada, portanto você não precisará vinculá-la a nenhum evento.
Uma função para o seu problema seria:
Function Updating_Date(dependent_cell as Range) As Date
Updating_Date = Date
End Function
Depois de colocar esse código em um módulo em sua pasta de trabalho, você pode simplesmente inseri- =Updating_Date(B5)
lo C5
e copiá-lo. Isso deve fazer com que a data em C5 seja atualizada sempre que os valores na coluna C mudarem.
Para fazer com que a data só apareça se a célula da coluna B não estiver em branco, você pode aplicar uma fórmula if na célula da coluna C, como mencionei ema outra pergunta que você fez. Basta inserir a mesma condicional que mostrei lá (ou seja, ISBLANK(B5)
) e fazer com que o valor de retorno seja uma string vazia ( ""
) se a condição for verdadeira, e o UDF ( Updating_Date(B5)
) se a condição for falsa.
Responder2
O seguinte coloca a data de hoje na célula “B” sempre que houver uma alteração na célula “A”:
Private Sub Worksheet_Change(ByVal Target As Range)
' Auto Date
Dim Cell As Range
For Each Cell In Target
If Cell.Column = Range("A:A").Column Then
If Cell.Value <> "" Then
Cells(Cell.Row, "B").Value = Int(Now)
Else
Cells(Cell.Row, "B").Value = ""
End If
End If
Next Cell
End Sub
Este código precisa ser colocado no módulo VBA da planilha onde você deseja que esse comportamento ocorra.
Responder3
Você pode fazer isso sem VBA. Eu precisava que minha coluna C fosse preenchida com a data de hoje com base na coluna B com um valor inserido. Esta fórmula funciona para inseri-lo corretamente.
=IF(ISBLANK(B2)," ",NOW())
Coloquei isso na célula C2, pois era onde eu estava começando para minha coluna C. Você pode colocar isso em qualquer célula da coluna em que estiver começando. Em seguida, certifique-se de que minha referência B2 seja substituída pela coluna e célula em que seu valor está sendo inserido. Por exemplo, se sua célula inicial for F3, você deve alterar a fórmula para dizer
=IF(ISBLANK(F3), " ",NOW()).
E se a célula de data correspondente for K3, coloque a fórmula lá. (Você pode arrastar a fórmula para o restante das células da coluna quando ela estiver na primeira.)
Esta fórmula mantém as células de data vazias até que a célula "início" tenha um valor inserido. Depois que esse valor for inserido, a data será adicionada. Se o valor for excluído, o Excel removerá automaticamente a data. Portanto, não é perfeito, mas se você precisar de algo mais sofisticado, provavelmente precisará de um especialista em Excel ou de um programa que cuide disso para você.
Responder4
AFIK, você precisará fazer isso via VBA. Você pode criar uma função que observará as alterações em sua planilha, filtrará apenas as alterações nas células B5-B39 e atualizará as células em C de acordo.
ATUALIZAÇÃO: Você provavelmente saberá como entrar no VBA usando alt-F11.
Clique duas vezes no objeto Excel chamado Planilha1 ou em qualquer planilha de seu interesse (na lista em árvore no canto superior esquerdo) para obter o código dessa planilha.
Selecione Planilha e Alterar nos 2 menus suspensos. Então você obtém um código parecido com:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Já está disponível a variável “Target” que é uma referência à célula que muda.
Adicione algum código entre essas linhas:
debug.Print Target
e pressione ctrl-G para mostrar a janela imediata
Faça algumas alterações na planilha e volte para o código, você verá os dados inseridos aparecerem na janela Imediata.
Agora altere o código para dizer if Target.
e você verá uma lista suspensa de possíveis propriedades relacionadas à variável Target.
Com algumas alterações, você pode conseguir isso:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And (Target.Row > 4 And Target.Row < 40) Then
Debug.Print Target.Value
End If
End Sub
Que agora imprime apenas alterações no intervalo de seu interesse.
Se quiser saber como alterar um valor em uma célula, você pode gravar uma macro fazendo isso manualmente e examinar o código. Espero que você tenha o suficiente para continuar agora. Deixe-me saber se não.