Ir ao conteúdo
  • Cadastre-se

Excel Formula de condição SE no Word


josequali
Ir à solução Resolvido por LaerteB,

Posts recomendados

Bom dia @Midori @LaerteB @Edson Luiz Branco! Gostaria de tirar um dúvida. Atualmente preciso criar a seguintes condição para formula na minha planilha do excel.

 

 

image.png.2a890df6842a14c9c62ce9674f35ea78.png

 

 NOTA: coloquei como número qualquer porque ele pode ser alterado a depender da data. Segue em anexo a planilha mode.

 Desde já agradeço a disponibilidade. :D

formula da lista mestra para vencimento.zip

Link para o comentário
Compartilhar em outros sites

Bom dia, josequali

 

Espero que seja isso que queria; veja a fórmula abaixo se resolve a sua dúvida:

=SE(J3<HOJE();"Vencido";"A Vencer")

Qualquer coisa estamos aqui para ajudá-lo 😀

 

Aguardando sua resposta e seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB🙂

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

 Boa tarde, josequali

 

Eu criei um código VBA para este caso em específico (pode ser
feito com fórmula também), mas achei melhor assim ...

 

Abaixo copie e cole este código em um modulo:

Sub Anovencido()

Dim lin As String

 Sheets("Plan1").Select

 lin = 3

 Do Until Cells(lin, 10) = ""

  If Year(Cells(lin, 10)) < Year(Cells(1, 26)) Then
    Cells(lin, 11) = "Obsoleto"

  End If

  lin = lin + 1

 Loop
  
 End Sub


Depois no VBE Clique na Plan1 (Microsoft Excel Objetos) e cole este
código abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)
 Call Anovencido
End Sub


Agora sempre que clicar na Sheet "Plan1" ele será executado.

 

Espero que era o que queria

 

Aguardando sua resposta e seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Boa tarde, josequali

 

Para o seu caso acima, podemos fazer o seguinte, copie e cole este código abaixo

em um módulo (exclua o outro código que te informei no post #5):

Sub Anovencido()

Dim lin As String

 Sheets("Plan1").Select

 lin = 3

 Do Until Cells(lin, 10) = ""

   If Year(Cells(lin, 10)) < Year(Cells(1, 26)) And Cells(lin, 10).Value < Cells(1, 26).Value Then
    Cells(lin, 11) = "Vencido e Obsoleto"
    
  ElseIf Year(Cells(lin, 10)) = Year(Cells(1, 26)) And Cells(lin, 10).Value < Cells(1, 26).Value Then
    Cells(lin, 11) = "Vencido"
  
  ElseIf Year(Cells(lin, 10)) = Year(Cells(1, 26)) And Cells(lin, 10).Value >= Cells(1, 26).Value Then
    Cells(lin, 11) = "A Vencer"
    
  End If
   
  lin = lin + 1

 Loop
  
 End Sub

Agora retire todas as fórmulas das células da coluna "K", pois não vai mais precisar delas ..

 

Espero que isto resolva, verifique 😉

 

Aguardando sua resposta e seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB🙂

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Boa noite, josequali

 

Desculpe somente responder agora é que eu estava muito atarefado aqui 😓...

 

Fiquei muito feliz que você chegou a solução via fórmula 😃; mas fiquei

impelido de terminar uma solução via VBA com a execução de

se a data de hoje for maior que 3 anos (não tinha inserido nos post anteriores).

 

Abaixo o código que faz a mesma coisa que a sua fórmula, não precisando mais das

fórmulas nas células da Coluna "K" (colar em um módulo):

Sub Anovencido()

Dim lin As String
Dim x As Integer
Dim i As Integer

 Sheets("Plan1").Select

 lin = 3
 
 Do Until Cells(lin, 10) = ""
 
  x = Year(Cells(lin, 10))
  i = Year(Cells(1, 26))

  If i - x >= "3" Then
    Cells(lin, 11) = "Obsoleto"

  ElseIf Year(Cells(lin, 10)) < Year(Cells(1, 26)) And Cells(lin, 10).Value < Cells(1, 26).Value Then
    Cells(lin, 11) = "Vencido"

  ElseIf Year(Cells(lin, 10)) = Year(Cells(1, 26)) And Cells(lin, 10).Value < Cells(1, 26).Value Then
    Cells(lin, 11) = "Vencido"

  ElseIf Year(Cells(lin, 10)) = Year(Cells(1, 26)) And Cells(lin, 10).Value >= Cells(1, 26).Value Then
    Cells(lin, 11) = "A Vencer"

  End If

  lin = lin + 1

 Loop

 End Sub

Agora para que o código acima seja executado quando "qualquer" célula da Plan1 for alterada, é só colar

este código abaixo no VBE clicando na Plan1:

Private Sub Worksheet_Change(ByVal Target As Range)

   Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual
   Application.EnableEvents = False

If Target.Cells.Count > 0 Then
Call Anovencido
End If

   Application.Calculation = xlCalculationAutomatic
   Application.EnableEvents = True
   Application.ScreenUpdating = True

End Sub

Então esta é outra forma de fazer a mesma coisa que a sua fórmula do post #10 😁

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB🙂

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Boa tarde, josequali

 

Pode me informar melhor o que está ocorrendo, pois modifiquei as datas das células da coluna "J" e automaticamente

ele altera a Coluna "K" corretamente... o código que te passei está funcionando perfeitamente bem sem erros..

qual o problema, não estou entendendo, qual seria??

 

Estou colocando o arquivo exemplo em anexo que estou utilizando e está funcionando tranquilamente, verifique.

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"😃

 

LaerteB🙂

formula lista mestra vencimento solucao1 LB - 25-08-2020.zip

Link para o comentário
Compartilhar em outros sites

  • Solução

Boa tarde, @josequali

 

Eu acho que entendi o porque não estava funcionando de acordo... eu alterei

pequenos trechos, primeiro tirei a ligação da Célula "Z1" que continha

uma fórmula informando sempre a data atual, por um trecho de código 

que faz a mesma coisa...

 

Segundo coloquei a função "CDate", desta forma agora colocará 

tranquilamente se for de 3 a mais anos referente a diferença entre

as datas....

 

Terceiro o porque não estava funcionando quando era alterado algum dado

nas células; é que não deviam existir as linhas que se encontram na imagem

abaixo(acho que estava muito cansado e não reparei que tinha deixado

estas linhas😳; estava testando no botão "executar sub/userform"

por isso estava funcionando😶) ; e mais abaixo os códigos que alterei,

copie e cole no arquivo exemplo e faça o teste, verificando que agora

está funcionando "perfeitamente" 😉..
1895351729_Img001-excluirlinhaspexecutarmacro29-08-2020.jpg.463fc2e25c9260063961341bcbaf8041.jpg

 

Agora os códigos corretos:

Private Sub Worksheet_Change(ByVal Target As Range)

   Application.ScreenUpdating = False
   Application.EnableEvents = False

If Target.Cells.Count > 0 Then
Call Anovencido
End If

   Application.EnableEvents = True
   Application.ScreenUpdating = True

End Sub
Sub Anovencido()

Dim lin As String
Dim x As Date 'Integer
Dim i, a As Date

 Sheets("Plan1").Select

 lin = 3
 
 Do Until Cells(lin, 10) = ""
 
  x = Year(Cells(lin, 10))
  a = Date
  i = Year(a)

   If CDate(i) - CDate(x) >= "3" Then
    Cells(lin, 11) = "Obsoleto"
    
  ElseIf CDate(x) < CDate(i) And Cells(lin, 10) < CDate(Date) Then
    Cells(lin, 11) = "Vencido"

  ElseIf CDate(x) = CDate(i) And Cells(lin, 10) < CDate(Date) Then
    Cells(lin, 11) = "Vencido"

  ElseIf CDate(x) = CDate(i) And Cells(lin, 10) >= CDate(Date) Then
    Cells(lin, 11) = "A Vencer"

  End If

  lin = lin + 1

 Loop
  
 End Sub

Agora tu não precisa mais usar as formulas, somente esta macro.

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB🙂

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Bom dia @LaerteBe @Midori semelhante a condição anterior me encontrei na seguinte condição em que preciso que aparece uma determinada informação na minha coluna BU a depender das seguintes condições. Sendo que para a formula dar certo ela tem que levar em consideração que se o campo da condição posterior atender os critérios, ela deve sobrepor a condição da formula anterior para o resultado aparecer na célula.

 

Se o campo prazo (V3) estiver vazio = Não iniciado
Se o campo prazo (V3) estiver preenchido = Em execução
Se o campo prazo (v3) a data for menor ou igual a 6 dias referente a hoje() = Atrasado recuperável
Se o campo prazo (v3) a data for maior que 6 dias referente a hoje() = Cronograma comprometido
Se o campo descrição (BR) estiver preenchido = Concluído
Se o campo Justificativa (BV) estiver preenchido = Cancelado

 

Tentei fazer usando a condição se, mas não deu muito certo, porque não consigo atender a todos os critérios.

 

=SE(V3="";"Não iniciado";SE(V3="<>";"Em execução";SE(HOJE()-V3<=6;"Atrasado recuperável"; "Cronograma comprometido")))

 

@LaerteB tentei adaptar o seu condigo anterior, mas não deu muito certo, porque não entendo alguns códigos que foram escritos. Segue em anexo o modelo de planilha.

modelo de planilha.zip

Link para o comentário
Compartilhar em outros sites

@LaerteB @Midori Correção:

 

o comando deve ser assim:

 

Se o campo responsável (U3) estiver vazio = Não iniciado
Se o campo responsável (U3) estiver preenchido = Em execução
Se o campo prazo (v3) a data for maior que 6 dias e menor que 10 dias referente a hoje() = Atrasado recuperável
Se o campo prazo (v3) a data for maior que 10 dias referente a hoje() = Cronograma comprometido
Se o campo descrição (BR) estiver preenchido = Concluído
Se o campo Justificativa (BV) estiver preenchido = Cancelado

 

segue em anexo o novo modelo.

 

modelo de planilha.zip

Link para o comentário
Compartilhar em outros sites

Boa tarde, @josequali

 

Desculpe a demora muita correria...

 

Abaixo o código que soluciona a sua última questão, referente ao post #18:

Sub Status()

Dim x As Date
Dim a As Date
Dim y As Integer

 Sheets("Plan1").Select

For y = 3 To 7
 
  x = Cells(y, 22)
  a = Date
 
  If Cells(y, 21) = "" And CDate(a) = Cells(y, 22) _
  Or Cells(y, 22) = "" And Cells(y, 70) = "" Then
    Cells(y, 73) = "Não iniciado"
  
   ElseIf Cells(y, 21) <> "" And CDate(a) = Cells(y, 22) _
   And Cells(y, 70) = "" Then
    Cells(y, 73) = "Em execução"

  End If

  If CDate(x) - CDate(a) <= "6" And CDate(a) < Cells(y, 22) _
  And Cells(y, 21) <> "" _
  And Cells(y, 70) = "" Then
    Cells(y, 73) = "Atrasado recuperavel"

   ElseIf CDate(x) - CDate(a) > "10" And CDate(a) < Cells(y, 22) _
   And Cells(y, 21) <> "" _
   And Cells(y, 70) = "" Then
     Cells(y, 73) = "Cronograma comprometido"

  End If

  If Cells(y, 70) <> "" Then
    Cells(y, 73) = "Concluído"

   End If
   
  If Cells(y, 77) <> "" Then
    Cells(y, 73) = "Cancelado"

   End If

Next y
  
 End Sub

Copiar e colar em um módulo o código acima...

 

E não esquecer de colocar o código (ou criar um botão se quiser, para executar esta macro) que mencionei no

post #15, referente ao Objeto/Procedimento abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)

 

Por gentileza verificar e testar no seu projeto ou no seu arquivo exemplo, se

ainda não estiver como queria, informar com detalhes a sua dúvida...

este código eu testei e está funcionando de acordo...

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"😀

 

LaerteB🙂

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@LaerteB Bom dia! Realizei os testes. Os comandos referentes a Não iniciado, concluído e cancelado estão funcionado, mas o de em execução, atrasado recuperável e cronograma comprometido não. Segue em anexo a planilha já com as alterações indicadas. Desde já, agradeço pela disponibilidade e ajuda. :D 

modelo de planilha.zip

Link para o comentário
Compartilhar em outros sites

@LaerteB vou melhorar a descrição, confundi um pouco a explicação.

 

Se o campo responsável (U3) estiver vazio = Não iniciado
Se o campo responsável (U3) estiver preenchido = Em execução


Se hoje for maior que 1 a 6 dias referente ao campo prazo (v3) = Atrasado recuperável

"ou seja se após o prazo estabelecido já tiver passado 1 a 6 dias".

 

se hoje for maior que 6 dias referente ao campo prazo (v3) = Cronograma comprometido

"ou seja se após o prazo estabelecido já tiver passado mais que 6 dias".


Se o campo descrição (BR) estiver preenchido = Concluído
Se o campo Justificativa (BV) estiver preenchido = Cancelado

 

 

também gostaria que a macro fosse executada sem a necessidade de um botão, como por exemplo ao abrir a planilha (acho que ficaria na pasta de trabalho) ou ao iniciar o userform no evento inicialize. Ou simplesmente quando a informação da célula fosse alterada.

Link para o comentário
Compartilhar em outros sites

Bom dia, @josequali

 

Verifiquei e realmente estava trocado alguns sinais 😳, por esse motivo não

estavam funcionando "execução, atrasado recuperável e cronograma comprometido",

também alterei e retirei um pequeno trecho de uma linha... agora estão funcionando

de acordo 😉..

 

Abaixo o código correto, é só copiar e colar no módulo substituindo o código

anterior:

Sub Status()

Dim x As Date
Dim a As Date
Dim y As Integer

 Sheets("Plan1").Select

For y = 3 To 7
 
  x = Cells(y, 22)
  a = Date
 
  If Cells(y, 21) = "" And CDate(a) = Cells(y, 22) _
  Or Cells(y, 22) = "" And Cells(y, 70) = "" Then
    Cells(y, 73) = "Não iniciado"
  
   ElseIf Cells(y, 21) <> "" And Cells(y, 70) = "" Then
    Cells(y, 73) = "Em execução"

  End If

  If CDate(a) - CDate(x) <= "6" And CDate(a) > Cells(y, 22) _
  And Cells(y, 21) <> "" _
  And Cells(y, 70) = "" Then
    Cells(y, 73) = "Atrasado recuperavel"

   ElseIf CDate(a) - CDate(x) > "6" And CDate(a) > Cells(y, 22) _
   And Cells(y, 21) <> "" _
   And Cells(y, 70) = "" Then
     Cells(y, 73) = "Cronograma comprometido"

  End If

  If Cells(y, 70) <> "" Then
    Cells(y, 73) = "Concluído"

   End If
   
  If Cells(y, 77) <> "" Then
    Cells(y, 73) = "Cancelado"

   End If

Next y
  
 End Sub

 

Outra coisa não há necessidade de colocar esse código acima, também, no

Objeto/Procedimento citado abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)

Por gentileza exclui-lo deste OK , só deixando-o no módulo 🙂..

 

Agora em relação a sua menção de como executar a macro "...a macro fosse

executada sem a necessidade de um botão...", já está sendo executado quando

qualquer alteração nas células forem feitas, ela funcionará, veja no código que
está dentro do Objeto/Procedimento - que informo abaixo veja:

Private Sub Worksheet_Change(ByVal Target As Range)

   Application.ScreenUpdating = False
   Application.EnableEvents = False

If Target.Cells.Count > 0 Then
Call Status
End If

   Application.EnableEvents = True
   Application.ScreenUpdating = True

End Sub

Este código acima já faz isso sem a necessidade de um botão; quando citei sobre

o botão era que tu tens essa opção também se quiser 😉

 

Espero que agora esteja de acordo com que solicitou... verificar e teste, se tiver

alguma divergência ou outra questão me informe 🙂

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB😀

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@LaerteB Bom dia :D ! As condições funcionaram perfeitamente agora. Entretanto, tive um pequeno problema, pois o comando só funciona da linha 1 a linha 7 (imagem), ou seja caso eu insira uma nova informação, a linha 7 desce e passa a ocupar a posição 8, e caso eu precise alterar alguma informação dessa linha (linha 8 ) ela não irá mais receber o comando da macro ao ser executada (imagem 2).

obs: No meu sistema de cadastro quando eu realizo um novo registro a informação sempre será inserida na linha 3, e informação que antes ocupava a linha 3 desce para a linha 4, assim como as demais descem uma posição para dar lugar ao novo registro.

Eu tentei colocar como sendo o comando da linha 1 a linha 100 por exemplo, mas quando executo a macro ela inseri várias linhas na minha tabela, interferindo assim no meu cadastro interno (imagem 03). O ideal que após inserir uma nova linha independente dela ter descido ou não, ela continue recebendo o comando. Talvez fosse mais fácil de executar de acordo com o nome da tabela na planilha 1 nomeando ela como "dados", por exemplo. Segue em anexo a planilha já modificada. Desde já agradeço a ajuda e disponibilidade :D .

imagem 01.png

imagem 02.png

imagem 03.png

modelo de planilha.zip

Link para o comentário
Compartilhar em outros sites

Bom dia, @josequali

 

Altere o trecho do seu código que se encontra no módulo, por este que

descrevo abaixo:

Sub Status()

Dim x As Date
Dim a As Date
Dim y As Integer
Dim ultlin As Long

 Sheets("Plan1").Select
 
ultlin = ActiveSheet.ListObjects("dados").DataBodyRange.Rows.End(xlDown).Row

For y = 3 To ultlin

Observe que foi incluído a linha "ultlin" e a variável dela, e foi alterado o "for"

tirando o número "7" depois do "To" e incluindo o "ultlin" (foi colocado o nome

da tabela do seu arquivo exemplo, mas altere para no nome da tabela que se

encontra no seu projeto)😉 .

 

Agora funcionará como solicitou no post #23; por gentileza verificar e testar...

 

Aguardando o seu Feed Back ... se foi útil, não esqueça de clicar na "mãozinha"

 

LaerteB🙂

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Como se tornar um desenvolvedor full-stack

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!