Notifications
Clear all

"OR" e "AND" por variável

9 Posts
2 Usuários
0 Reactions
1,676 Visualizações
(@celsoyano)
Posts: 75
Trusted Member
Topic starter
 

Boa noite pessoal,

Talvez, a minha dúvida seja absurda, mas é que se eu não achar uma solução ou ter que fazer enúmeros "IF".

Bom estou fazendo uma planilha para avaliar uma frase conforme alguns parâmetros até que o resultando seja verdadeiro.
Exemplo:
A1 = "FGTS"
B1 = "E" (na B1 posso informa "E" ou "OU")
C1 = "SALARIOS"
D1 = "OU (na D1 posso informa "E" ou "OU")"
E1 = "PAGAMENTO"
F1 = verdadeiro ou falso???

No meu código, na linha "IF" eu queria que a função or e and variasse conforme eu informasse nas celulas B1 e D1

se na célula B1 estevesse "E", então: IF CELLS(1,1) = "FGTS" AND CELLSO(1,3) = "SALARIO"
se na célula B1 estevesse "OU", então: IF CELLS(1,1) = "FGTS" OR CELLSO(1,3) = "SALARIO"

Com poucos critérios assim, não teria problema vários "IF/ ELSEIF", mas na planilha que estou fazendo há muitas combinações.

Abaixo, segue um modelo GROSSEIRO do que eu gostaria

Agradeço a quem puder me ajuda

Sub TESTE()

CONDICAO = Range("B1")
If CONDICAO = "OU" Then
    CONDICAO = "or"
ElseIf CONDICAO = "E" Then
    CONDICAO = "and"
End If
        
        
        If Range("A1") = "AMARELO" & CONDICAO & Range("C1") = "VERDE" Then
            MsgBox "VERDADEIRO"
        End If

End Sub
 
Postado : 09/08/2014 9:51 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Realmente precisa de VBA para isso?

Com poucos critérios assim, não teria problema vários "IF/ ELSEIF", mas na planilha que estou fazendo há muitas combinações.

Use PROCV!!!

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/08/2014 6:51 am
(@celsoyano)
Posts: 75
Trusted Member
Topic starter
 

Bom dia Alexandre,

Eu precisava que fosse em VBA msm, porque a intenção é importar o relatório do cliente, lançar os códigos que preciso baseado nesses parâmetros que preciso fazer, e gerar um arquivo txt para importar no meu sistema. Tudo isso com um clique.

Obrigado se puder me ajudar

 
Postado : 10/08/2014 7:24 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!!

Tem como postar seu arquivo modelo?

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/08/2014 8:26 am
(@celsoyano)
Posts: 75
Trusted Member
Topic starter
 

Alexandre,

segue em anexo. Estou querendo que ela funcione da seguinte forma

vou importar o relatório do cliente e formatar da forma que está na planilha "Contabilização" ... essa etapa tranquila.

Bom, agora tenho que preencher as colunas débito e crédito comparando o coluna "Histórico1" com a planilha dados .. é aqui que estou com dificuldade.
o primeiro histórico para analisa é: "PAGAMENTO FATURA SANEPAR MATRIZ REFERENTE 12/2013"

Na planilha "Dados", a primeira linha traz:
- O histórico contem a palavra "SANEPAR" E contem a palavra JUROS""?? verdadeiro!
Então debito/credito da planilha "Contabilização é igual debito/credito da planilha "Dados"

Segunda linha:
- O histórico começa com "PAGAMENTO" OU começa com "PGTO" E contem a palavra "Sanepar"? Verdadeiro!
Então debito/credito da planilha "Contabilização é igual debito/credito da planilha "Dados"

é claro que quando tiver a primeira resposta verdade, a macro pule para o próximo histórico.

tá meio confuso né? mas espero que tenha entendido.

vlw pela força

 
Postado : 10/08/2014 9:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

as vezes pensamos que sugerimos a melhor opção de solução, mas devemos parar e ouvir a sugestão dos mais experientes.
Vc não vai conseguir fazer isso com macro. Claro, pode conseguir? Pode. Mas está longe de ser a solução mais adequada. Até por fórmulas ficaria ridículo de complicado.

Você precisa repensar o modelo de importação destes dados, com ou sem macro, mas sem depender do conteúdo de células para determinar os encadeamentos das condições.

p.s.: compactei seu arquivo conforme as normas do forum.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 10/08/2014 7:56 pm
(@celsoyano)
Posts: 75
Trusted Member
Topic starter
 

fernando.fernandes, bom dia

Por favor, me perdoe se em algum momento pareceu arrogância da minha parte questionar algo. Tenho profunda ADMIRAÇÃO, RESPEITO e AGRADECIMENTO por TODAS as pessoas que disponibilizam um tempo de suas vidas para ajudar com nossos problemas, e compartilha vossos conhecimentos GRATUITAMENTE. Me desculpe mesmo! Todo o conhecimento que tenho sobre Excel ou VBA eu devo a vocês, pois o único curso de Excel que fiz foi aquele básico que você aprende Windows/Word/Excel.

E de fato, está bem complicado msm, estou tentando fazer isso mas olha o tamanho que já está ....

'BUSCA QUAL COMBINAÇÃO CORRESPONDE COM A PLANILHA DADOS
        If CONDICAO1 = "OU" And CONDICAO2 = "E" And CONDICAO3 = "E" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True Or RESULTADO_CRITERIO2 = True Then
                If RESULTADO_CRITERIO_A = True And RESULTADO_CRITERIO_B = True Then
                    Range("B" & A) = Sheets("DADOS").Range("B" & B)
                    Range("C" & A) = Sheets("DADOS").Range("C" & B)
                End If
            End If
        ElseIf CONDICAO1 = "OU" And CONDICAO2 = "OU" And CONDICAO3 = "E" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True Or RESULTADO_CRITERIO2 = True Or RESULTADO_CRITERIO_A = True Then
                If RESULTADO_CRITERIO_B = True Then
                    Range("B" & A) = Sheets("DADOS").Range("B" & B)
                    Range("C" & A) = Sheets("DADOS").Range("C" & B)
                End If
            End If
        
        ElseIf CONDICAO1 = "OU" And CONDICAO2 = "OU" And CONDICAO3 = "OU" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True Or RESULTADO_CRITERIO2 = True Or RESULTADO_CRITERIO_A = True Or RESULTADO_CRITERIO_B = True Then
                Range("B" & A) = Sheets("DADOS").Range("B" & B)
                Range("C" & A) = Sheets("DADOS").Range("C" & B)
            End If
        
        ElseIf CONDICAO1 = "E" And CONDICAO2 = "OU" And CONDICAO3 = "OU" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True Then
                If RESULTADO_CRITERIO2 = True Then
                    If RESULTADO_CRITERIO_A = True Or RESULTADO_CRITERIO_B = True Then
                        Range("B" & A) = Sheets("DADOS").Range("B" & B)
                        Range("C" & A) = Sheets("DADOS").Range("C" & B)
                    End If
                End If
            End If
        
        ElseIf CONDICAO1 = "E" And CONDICAO2 = "E" And CONDICAO3 = "OU" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True And RESULTADO_CRITERIO2 = True And RESULTADO_CRITERIO_A = True Then
                ETAPA1 = True
                If ETAPA1 = True Or RESULTADO_CRITERIO_B = True Then
                    Range("B" & A) = Sheets("DADOS").Range("B" & B)
                    Range("C" & A) = Sheets("DADOS").Range("C" & B)
                End If
            End If
        
        ElseIf CONDICAO1 = "E" And CONDICAO2 = "E" And CONDICAO3 = "E" Then 'CONFERIDO
            If RESULTADO_CRITERIO1 = True And RESULTADO_CRITERIO2 = True And RESULTADO_CRITERIO_A = True And RESULTADO_CRITERIO_B = True Then
                Range("B" & A) = Sheets("DADOS").Range("B" & B)
                Range("C" & A) = Sheets("DADOS").Range("C" & B)
            End If
        
        ElseIf CONDICAO1 = "E" And CONDICAO2 = "OU" And CONDICAO3 = "E" Then
            If RESULTADO_CRITERIO1 = True Then
                If RESULTADO_CRITERIO2 = True Or RESULTADO_CRITERIO_A = True Then
                    If RESULTADO_CRITERIO_B = True Then
                        Range("B" & A) = Sheets("DADOS").Range("B" & B)
                        Range("C" & A) = Sheets("DADOS").Range("C" & B)
                    End If
                End If
            End If
        
        ElseIf CONDICAO1 = "OU" And CONDICAO2 = "E" And CONDICAO3 = "OU" Then
            If RESULTADO_CRITERIO1 = True Or RESULTADO_CRITERIO2 = True Then
                If RESULTADO_CRITERIO_A = True Or RESULTADO_CRITERIO_B = True Then
                    Range("B" & A) = Sheets("DADOS").Range("B" & B)
                    Range("C" & A) = Sheets("DADOS").Range("C" & B)
                End If
            End If
        End If

Em relação a compactação dos arquivos me desculpe, acabei me esquecendo. Prestarei mais atenção das próximas vezes

Obrigado a vcs pela ajuda e desculpe novamente

 
Postado : 11/08/2014 6:14 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara fica tranquilo, eu não disse q vc foi arrogante ou qquer outra coisa. Obirgado pelo carinho até e reconhecimento pelo valor agregado do forum.

E é isso que vc precisará relevar para entender o que eu digo:
mude a lógica da sua importação. Não é o melhor caminho, vc vai se perder no seu código, nenhum programador vai conseguir, mesmo querendo, te ajudar com o código.se fosse só duas condições, sei lá, apesar de não ser adequado, seria factível. Como vc disse que são várias, esquece, não é assim que vc vai fazer essa carga.

Vc precisa criar regras e tabelas de referenciamentos, um procv talvez, e assim deixar que o próprio Excel calcule pra vc os resultados que deseja...

(Vai por mim)

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 11/08/2014 10:10 am
(@celsoyano)
Posts: 75
Trusted Member
Topic starter
 

fernando.fernandes

Blz!! Tá complicado msm ... já deu zica aqui, se preencher todos os criterios blz .. deu certo! mas ta dando erro se eu preencher apenas dois, ou apenas tres .. ai tá dando erro ... e pra ficar do jeito que eu queria, vou ter q fazer mais um zilhao de IF .. ENDIF .. sem condições.

Vou procurar uma outra forma, ou então simplificar .. uso um critério só, e preencho na mão o que preencher e boa!!!

Obrigado pelas dicas!!!

 
Postado : 11/08/2014 2:54 pm