Ir ao conteúdo

Excel contador automático conforme o mês ano e célula.


Ir à solução Resolvido por GENECIOFICIAL,

Posts recomendados

Postado

Bom dia!

 

Muito obrigado pela fórmula.

 

A célula H10, foi preenchida com o texto blablabla, a contador da célula D4, deve iniciar com 01/jan/2023, se alterar o texto da célula H10, o contador deve mudar para 02/jan?2023.

 

E assim segue a contagem, conforme a explicação anterior. 

 

Grato.

Postado

Veja se assim resolve,

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$10" Then
        [D4].Value = Sequencia([D4])
    End If
End Sub

Function Sequencia(Celula As Range) As String
    Dim Contador    As Long
    Dim Ano         As Integer
    Dim Valor       As Variant
    Dim Mes         As String
    Dim MesAtual    As String
    
    MesAtual = MonthName(Month(Date), True)
    Valor = Split(Celula.Value, "/")
    Contador = Valor(0)
    Ano = Valor(2)
    Mes = MonthName(Month( _
        DateSerial(Ano, Int(Valor(1)), 1)), True)
    
    If Year(Date) <> Ano Then
        Contador = 1
        Mes = MesAtual
        Ano = Year(Date)
    Else
        If Mes <> MesAtual Then
            Mes = MesAtual
        End If
        Contador = Contador + 1
    End If
    
    Sequencia = Format(Contador, "00") & "/" & Mes & "/" & Ano
End Function

 

Postado

@GENECIOFICIAL Para acontecer esse erro a célula deve estar em branco ou com um valor sem barras. Coloque um valor válido antes de testar.

 

Outra coisa que eu devia ter perguntado antes, esse contador pode deixar a célula D4 com um formato de data inválido? Tipo 32/Jan/2023?

  • Obrigado 1
Postado

Resposta: Sim

O contador para o mês de janeiro pode ultrapassar o número 31, como também não atingir o número 31, por exemplo chegar apenas ao número 17 por exemplo, o número é sequencial o que muda é o mês e o ano.

 

Não há relação alguma, com a quantidade de dias de cada mês.

 

Anexo outro arquivo, explicando com outras palavras.

 

Grato.

CONTADOR CONDICIONAL DIA MES ANO.xlsx

Postado

@GENECIOFICIAL A célula D4 deve ficar no formato texto. E na primeira execução caso a célula já tenha uma data em outro formato que não seja texto, converta ou formate para texto antes.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$10" Then
        If TypeName([D4].Value) = "String" Or [D4].Value = "" Then
            [D4].Value = Sequencia([D4])
        End If
    End If
End Sub

Function Sequencia(Celula As Range) As String
    Dim Contador    As Long
    Dim Ano         As Integer
    Dim Valor       As Variant
    Dim Mes         As String
    Dim MesAtual    As String
    
    MesAtual = MonthName(Month(Date), True)
    
    If Celula.Value = "" Then
        Sequencia = "01/" & MesAtual & "/" & Year(Date)
    Else
        Valor = Split(Celula.Value, "/")
        Contador = Valor(0)
        Mes = Valor(1)
        Ano = Valor(2)
        
        If Year(Date) <> Ano Then
            Contador = 1
            Mes = MesAtual
            Ano = Year(Date)
        Else
            If Mes <> MesAtual Then
                Mes = MesAtual
            End If
            Contador = Contador + 1
        End If
        Sequencia = Format(Contador, "00") & "/" & Mes & "/" & Ano
    End If
End Function

 

  • Curtir 1
  • Obrigado 1
  • Solução
Postado
17 horas atrás, Midori disse:

@GENECIOFICIAL A célula D4 deve ficar no formato texto. E na primeira execução caso a célula já tenha uma data em outro formato que não seja texto, converta ou formate para texto antes.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$H$10" Then
        If TypeName([D4].Value) = "String" Or [D4].Value = "" Then
            [D4].Value = Sequencia([D4])
        End If
    End If
End Sub

Function Sequencia(Celula As Range) As String
    Dim Contador    As Long
    Dim Ano         As Integer
    Dim Valor       As Variant
    Dim Mes         As String
    Dim MesAtual    As String
    
    MesAtual = MonthName(Month(Date), True)
    
    If Celula.Value = "" Then
        Sequencia = "01/" & MesAtual & "/" & Year(Date)
    Else
        Valor = Split(Celula.Value, "/")
        Contador = Valor(0)
        Mes = Valor(1)
        Ano = Valor(2)
        
        If Year(Date) <> Ano Then
            Contador = 1
            Mes = MesAtual
            Ano = Year(Date)
        Else
            If Mes <> MesAtual Then
                Mes = MesAtual
            End If
            Contador = Contador + 1
        End If
        Sequencia = Format(Contador, "00") & "/" & Mes & "/" & Ano
    End If
End Function

 

Bom dia! O código funcionou conforme a solicitação.

 

Muito obrigado.

 

Grato.

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...