Ir ao conteúdo
  • Cadastre-se
1Curioso

Criar lógica If Else no Excel usando Macros

Recommended Posts

Bom dia Galera!!

 

Estou tentando criar uma planilha no excel da seguinte forma:

 

Plan1 = "Tela de Cadastro"

Plan 2 = "Janeiro"

Plan 3 = "Fevereiro"

E assim sucessivamente, cada planilha receberá o nome de cada mês.

 

Na tela de cadastro terá as seguintes informações, como exemplo:

 

Mês           Data             Titulo      Valor

janeiro       02/02/15       Ação        15,00

 

Como fazer para salvar o dados do cadastro na planilha correspondente ao mês?

Por exemplo: Se for Mês de Janeiro, salvar dados na Plan2, se for fevereiro salvar dados na plan3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O ideal é renomear as planilhas para o mês correspondente para facilitar o cadastro.

Aí bastaria fazer algo desse tipo.

Dim WkMes As RangeDim WkCad as RangeSet WkMes = Worksheets("Janeiro")Set WkCad = Worksheets("Tela de Cadastro")WkMes.Range("A1").Value = WkCad.Range("A1").ValueWkMes.Range("A2").Value = WkCad.Range("A1").Value
Mas se não for possível renomear as planilhas, você pode criar uma tabela na planilha de cadastro para que a macro faça um vlookup ou find para identificar qual é a sheet correspondente ao mês

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe, mais ficou confuso pra mim. Tentei fazer conforme orientado e deu erro.

Tirei um print da planilha pra ver se ajuda.

 

post-757103-0-03848400-1424963109_thumb.

 

Os dados cadastrado nessa tela deverá ser direcionado para a próxima planilha caso atenda a seguinte condição. Se mês de Janeiro, cadastrar na planilha janeiro. Se fevereiro, cadastrar na planilha fevereiro e assim por diante.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem algum conhecimento em programação VBA?

Se você tentou rodar a macro que eu postei sem fazer nenhuma alteração, vai dar erro mesmo. É necessário fazer as alterações necessárias para adaptar ao seu caso.

Quanto aos valores que serão registrados nas planilhas do mês, a ideia é salvar sempre no mesmo Range? Ou você vai querer que os dados sejam salvos na forma de tabela sem perder os dados anteriores?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imaginando que você tenha um conhecimento mínimo de VBA você pode usar um SELECT CASE jogando o nome da Sheet correspondente ao mes numa variavel. por exemplo:

 

SELECT CASE valor_da_celula_com_mes

CASE Janeior

   var_nome_da_sheet = SJaneiro

CASE FEVEREIRO
  var_nome_da_shee = SFevereiro

....etc

 

depois voce seleciona as celulas que voce quer guardar.

 

depois copia

 

depois cola na Sheet certa, informando no local de colar a Sheet armazenada na variavel

 

*importante verificar a proxima linha disponível (em branco) antes de colar... pra evitar sobrepor os dados

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma vez que as planilhas já estão nomeadas com o mês correspondente, não há necessidade de usar if..else ou select case

Basta passar o mês como argumento para Worksheet, enfim...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deyvisson bom dia, 

 

Eu já havia postado anteriormente um exemplo, atendendo a uma situação parecida a sua:

http://forum.clubedohardware.com.br/topic/1103827-planilha-com-datas/

 

Infelizmente o colega, não quis usar a seu favor o poder da programação e preferiu fazer tudo manualmente (a criação das centenas de 'abas') e usar formulas para obter os dados a cada 'aba'.

 

Mas vamos lá, voltando ao seu caso, como voce não postou um modelo ou exemplo, criei um com os dados que informou, veja e consegue se adaptar, ou adaptar o codigo a seu cenário:

 

No modelo que anexei: Aperte o botão para executar a macro. 
Em qualquer aba que estiver, aperte ( CLTR + q ),  para retornar a aba (tela de cadastro) 
 
A macro em questão, verifica se existir ou não, e cria uma nova plan (aba) renomeando de acordo com o mes (coluna A  desta aba),  em seguida copia a linha toda com os dados para a respectiva aba. 
 
Na (coluna E), é criado uma chave (uma serial unica), para que a macro verifique se o registro já existe ou nao na aba do respect. mes. * SE QUISER PODE OCULTAR ESTA COLUNA
 
Na (coluna F), é criado em cada linha,  um atalho automatico, para que possa acessar a aba em que está o respect. registro.:
 
abx. 
 

Sub Verif_EnvRg_Abas()    Dim sh As Worksheet, Pla As Boolean    Dim Mes As String, chv As String    Dim rng As Range, C As Range, rngNC As Range    Dim i As Long: i = 2    Dim ct As String: ct = 0    Dim rg As String: rg = 0    With Sheets("Tela de Cadastro")        .Activate        Application.DisplayAlerts = False        For i = i To Range("a" & Rows.Count).End(xlUp).Row            If .Range("a" & i).Value = "" Then GoTo px            Mes = Trim(UCase(Left(.Range("a" & i).Value, 1)) & Mid(.Range("A" & i), 2))            Set rng = .Range(.Cells(i, "a"), .Cells(i, "e"))            Set rngNC = .Range(.Cells(1, "a"), .Cells(1, "e"))            chv = .Range("a" & i).Value & .Range("b" & i).Value & .Range("c" & i).Value & .Range("d" & i).Value            .Range("e" & i).Value = chv            For Each sh In Worksheets                If sh.Name Like Mes Then Pla = True: Exit For            Next            If Pla = True Then                uld = Sheets(sh.Index).Range("a" & Rows.Count).End(xlUp).Row + 1                Set C = Sheets(sh.Index).Range("e2:e" & uld).Find(chv, , LookIn:=xlValues, Lookat:=xlWhole)                If C Is Nothing Then                    Sheets(sh.Index).Range("a1:e1").Value = rngNC.Value                    Sheets(sh.Index).Range("a" & uld & ":e" & uld) = rng.Value                    .Range("f" & i).FormulaR1C1 = "=HYPERLINK(""[" & ThisWorkbook.Name & "]" & Mes & "!A1"",""CLICK AQUI"")"                    rg = rg + 1                End If            Else                Sheets.Add After:=Sheets(Sheets.Count)                ActiveSheet.Name = Mes                ActiveSheet.Range("a1:e1").Value = rngNC.Value                uld = ActiveSheet.Range("a" & Rows.Count).End(xlUp).Row + 1                ActiveSheet.Range("a" & uld & ":e" & uld) = rng.Value                .Range("f" & i).FormulaR1C1 = "=HYPERLINK(""[" & ThisWorkbook.Name & "]" & Mes & "!A1"",""CLICK AQUI"")"                ct = ct + 1                rg = rg + 1            End If            Pla = Falsepx:        Next i        .Activate        MsgBox ct & " Plan(abas) novas foram criadas" & Chr(10) & rg & " Registros copiados", 0, " Sucesso"    End WithEnd Sub

Tela de cadastro-Exemplo.zip

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de mais nada, gostaria de agradecer a todos que dedicaram uns minutinhos do seu tempo para tentar me ajudar, estou certo que atitudes como essa parte de pessoas nobres.

 

Basole, ficou incrível o modelo de planilha que você criou!!!

Estou buscando aprender um pouco sobre programação  e confesso que passei horas tentando entender as linhas de códigos que você criou para a planilha. 

 

Bom, como estou começando agora em VBA e não sei muito sobre os conceitos utilizados na ferramenta, tentei apenas adaptar a planilha que você gentilmente codificou.

Vou postar o link pra você ver como ficou e pedir sua ajuda para tentar colocar a mesma formatação (cor da celular, fonte, tamanho...) automaticamente para todas as planilhas assim que efetuar o cadastro. É possível?

 

Basole, se não for pedir muito, me fala um pouco sobre as linha de código que você criou nessa planilha? Quero entender um pouco mais e tentar fazer outros modelos.

 

 

Tela de cadastro-Alterada.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só vou lembra-los, que ao postar um código, por gentileza expliquem o mesmo linha por linha para que o autor entenda o que está acontecendo.

Se eu ver algum código só postado sem ser comentado, será apagado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×