Notifications
Clear all

SE com PROCV

14 Posts
2 Usuários
0 Reactions
2,143 Visualizações
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Pessoal, estou tendo dificuldades com uma formula especifica. A formula aparece na célula da forma que digitei, e não traz nenhum valor que deveria realmente retornar.

A formula deve conter algum erro. Gostaria que alguem me ajudasse a corrigir se possivel.

=SE(C483="consumo";"=VLOOKUP(RC[-7],damiano!A1:R1048576,5,0)";SE(C483="VENDANOVO";"=VLOOKUP(RC[-7],damiano!A1:R1048576,5,0)";0))

Ja tentei formatar a celula como formato geral, e clicar em F2 e dar enter como alguns sites indicam.. Mas o resultado continua a mesma formula.

Ex: Se a Coluna C contiver a palavra consumo ou vendanovo, deveria ser feito o procv, mas isso não está acontecendo. Apenas retornando a formula: =VLOOKUP(RC[-7],damiano!A1:R1048576,5,0)

Agradeço a ajuda!

 
Postado : 20/05/2013 10:15 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde Pimpao,

Seu Excel é inglês ou português?

Tenta alguma coisa desse tipo:

=se(ou(c483={"consumo";"vendanovo"});procv(rc[-7];damiano!a1:e1048576;5;0);0)

Abraço

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

 
Postado : 20/05/2013 10:35 am
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Rapaz, é portugues.. Mas é que eu estava tentando inserir essa formula por macro.. da seguinte forma..

Dim lmt As Variant
lmt = Range("A1048576").End(xlUp).Row

Range("H3").Select
ActiveCell.FormulaR1C1 = "=SE(OU(C3={""consumo"";""vendanovo""});PROCV(A3;damiano!A:E;5;0);0)"
Selection.AutoFill Destination:=Range("H3:H" & lmt), Type:=xlFillSeries

Com essa fórmula que voce me passou, até que funcionou escrevendo manualmente.. só tive que tirar o rc[-7] e colocar a celula mesmo.. Mas nessa macro, não está retornando nada. A celula esta ficando em branco. Tem alguma ideia?

 
Postado : 20/05/2013 11:05 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tenta essa:

With Range("H3")
    .Formula = "=IF(OR(C3={""consumo"";""vendanovo""}),VLOOKUP(A3,damiano!A:E,5,0),0)"
    .AutoFill Destination:=Range("H3:H" & lmt), Type:=xlFillSeries
End With

Qualquer coisa da o grito.
Abraço

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

 
Postado : 20/05/2013 11:24 am
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Po, valeu cara! Deu certo! Mandou muito!
Voce sabe porque com o ActiveCell.FormulaR1C1 não estava funcionando? Tentei jogar pra ingles as funções e nada.. Não aparecia nada na celula.. Fiquei puto..
Valeu, problema resolvido! Abraçao!

 
Postado : 20/05/2013 11:31 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tentando explicar:
Ao utilizar formula ou formulaR1C1, todos os "dados" referente a funções do excel devem ser em ingles ( a diferença básica entre FORMULA e FORMULAR1C1 e a maneira de se referir aos endereços (celulas e colunas).
.FormulaR1C1 ="=SE(OU(C3={""consumo"";""vendanovo""});PROCV(A3;damiano!A:E;5;0);0)" deveria ser algo como:
.FormulaR1C1 ="=IF(OR(R[-8]C[-5]={""consumo"";""vendanovo""}),VLOOKUP(R[-8]C[-7],damiano!C[-7]:C[-3],5,0),0)"
Lembrando: R[-8]C[-5] corresponde a C3 considerendo que a formula será adicionada em C11 (11-8 =3 e 8 - 5 (H é a oitava coluna)=3 (C e a terceira coluna).
Nessas situações e possivel (e até aconselhavel) utilizar FORMULALOCAL, onde os dados referentes a funções excel são passados no idioma local (no caso portugues), então o seu VBA poderia ser:
.FormulaLocal = "=SE(OU(C3={""consumo"";""vendanovo""});PROCV(A3;damiano!A:E;5;0);0)"

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

 
Postado : 20/05/2013 11:54 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

a expressão FormulaR1C1 funciona normalmente, só que esse R1C1 (Row Col (linha coluna)) as vezes confunde a gente, ou utilizaria a Formula ou FormulaR1C1, o problema é que você estava utilizando as duas na mesma fórmula, para ser R1C1 tenta assim:

With Range("H3")
    .FormulaR1C1 = "=IF(OR(RC[-6]={""consumo"";""vendanovo""}),VLOOKUP(RC[-8],damiano!C[-8]:C[-4],5,0),0)"
    .AutoFill Destination:=Range("H3:H" & lmt), Type:=xlFillSeries
End With

Qualquer coisa da o grito.
Abraço

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

 
Postado : 20/05/2013 11:58 am
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Tambem tentei fazer da seguinte forma.

Sub Repetidoss()
Dim c As Long

'Instrução para que a macro não pare quando o valor não for encontrado

On Error Resume Next
c = 3
Do While Cells(c, 1) <> Empty
If Cells(c, 3) = "consumo" Then
Cells(c, 8) = "=VLookup(Cells(c, 1), 'damiano!R1:R1048576', 5, 0)"
End If
If Cells(c, 3) = "vendanovo" Then
Cells(c, 8) = "=VLookup(Cells(c, 1), 'damiano!R1:R1048576', 5, 0)"
End If
If Cells(c, 3) <> "vendanovo" Or "consumo" Then Cells(c, 8) = "0"
c = c + 1
Loop
End Sub

No entanto, o retorno é sempre 0 ou qualquer coisa que eu coloque na expressão If Cells(c, 3) <> "vendanovo" Or "consumo" Then Cells(c, 8) = "0"

Alguem sabe qual o problema nessa macro? Estou perguntando a titulo de curiosidade..

 
Postado : 20/05/2013 3:40 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Se não me engano a aspa simples " ' " está mal colocada e tb qdo o nome da planilha não tem espeço não e requerida,
deve "definir" que e formula, caso contrario será considerado uma string (texto) e a variavel pode ser passada diferente
deveria serCells(c, 8).Formula = "=VLookup(A" & c & ",damiano!R1:R1048576, 5, 0)" - aqui tb refere-se a uma unica coluna "R" e pede o valor da quinta, não vai rolar

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

 
Postado : 20/05/2013 5:18 pm
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Realmente, tem muita coisa pra corrigir. No entanto, acredito que existe algum erro no If then, ou no while..

Porque tipo, eu resolvi fazer um teste substituindo da seguinte forma.

Sub Repetidoss()
Dim c As Long

'Instrução para que a macro não pare quando o valor não for encontrado

On Error Resume Next
c = 3
Do While Cells(c, 1) <> Empty
If Cells(c, 3) = "consumo" Then
Cells(c, 8) = "abc"
End If
If Cells(c, 3) = "vendanovo" Then
Cells(c, 8) = "cde"
End If
If Cells(c, 3) <> "vendanovo" Or "consumo" Then Cells(c, 8) = "fgh"
c = c + 1
Loop
End Sub

Então só voltou fgh.

No entanto, tem várias células que tem o valor de consumo e venda novo, o que deveria ser abc e cde.

 
Postado : 20/05/2013 6:15 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tenta assim Pimpao:

Option Explicit
Sub Repetidoss()
Dim c        As Long
On Error Resume Next

c = 3

    Do While Cells(c, 1) <> Empty
        If Cells(c, 3).Value = "consumo" Then
            Cells(c, 8).Value = "abc"
            ElseIf Cells(c, 3).Value = "vendanovo" Then
            Cells(c, 8) = "cde"
                Else: Cells(c, 8).Value = "fgh"
        End If
        c = c + 1
    Loop
End Sub

Qualquer coisa da o grito.
Abraço

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

 
Postado : 20/05/2013 6:51 pm
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Rapaz, tentei essa macro e continua retornando só "fgh". Sendo que ja verifiquei diversas vezes e na coluna C tem várias células com valor venda novo e consumo..
Nao consigo entender porque so volta o que está em else..

ahuahuahuahua

 
Postado : 20/05/2013 7:35 pm
(@pimpao)
Posts: 9
Active Member
Topic starter
 

Descobri.. Acredita que é porque a palavra consumo aparece com a letra c em maiusculo? "Consumo"
Da outra forma nao retorna simplesmente por causa disso.

Obrigado pela ajuda bernardo! Aprendi a fazer de duas formas diferentes!

 
Postado : 20/05/2013 7:39 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pimpao, tenta essa:

Option Explicit

Sub Repetidoss()
Dim lin         As Long
Dim ws1         As Worksheet
Dim ws2         As Range
On Error Resume Next

lin = 3
Set ws1 = ThisWorkbook.Worksheets("Plan1")

    Do While ws1.Cells(lin, 1) <> Empty
    Set ws2 = ws1.Cells(lin, 8)
        Select Case UCase(ws1.Cells(lin, 3))
            Case "CONSUMO":     ws2 = "abc"
            Case "VENDANOVO":   ws2 = "cde"
            Case "PATRIMONIO":  ws2 = "fgh"
            Case "DESPESA":     ws2 = "ijk"
            Case "CUSTO":       ws2 = "lmn"
            Case Else:          ws2 = "opq"
        End Select
        lin = lin + 1
    Loop
        
Set ws1 = Nothing
Set ws2 = Nothing

End Sub

Mais otimizada e não terá problema com o maiúsculo e minúsculo.

Qualquer coisa da o grito.
Abraço

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

 
Postado : 20/05/2013 7:57 pm