Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
#66604
Boa noite, pessoal.

Preciso de ajuda com uma macro que me retorna o maior número ao comparar as primeiras Células de duas colunas.
Fiz um esboço da macro e ela funciona a grosso modo desde que o valor das células das duas colunas em questão sejam números.
Código: Selecionar todos
Sub Calcular_Linhas()
    
    Dim Plan As Worksheet
    Dim Tabela As ListObject
    Dim Col_Qtde As Long, Col_Parc As Long
    Dim Qtde As Long, Parcelas As Long
    Dim Num_Linhas As Integer
    
    Set Plan = Sheets("MATRIZ")
    Set Tabela = Plan.ListObjects("Tabela1")
    
    Col_Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Column
    Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Cells(1, 1).Value
        
    Col_Parc = Tabela.ListColumns("Parcelas").DataBodyRange.Column
    Parcelas = Tabela.ListColumns("Parcelas").DataBodyRange.Cells(1, 1).Value
    
    If Qtde > Parcelas Then
        Num_Linhas = Qtde
    Else
        Num_Linhas = Parcelas
    End If
    
    MsgBox "O Número de Linhas é igual a " & Num_Linhas
    
End Sub
Porém há situações em que as células dessas duas colunas apresentam valor "" ou "-".
Acredito que preciso de um "tratamento de erro" ou algo semelhante á fórmula ÉNUM do Excel para verificar se os valores comparados são números.
Se os valores das duas colunas não forem numéricos o Resultado da Variável procurada pela macro deve ser igual a 0 (zero) e caso apelas um dos dois valores seja numérico retornar o valor do número.

Observe que da maneira como está a Macro irá retornar em erro pois o valor da célula K23 não é um número. Ao inserir qualquer número nessa célula a macro funciona.

Segue a planilha para verificação e testes.
Você não está autorizado a ver ou baixar esse anexo.
#66623
Bom dia, boa tarde, boa noite amigo!!

Pelo que entendi (não sei se estou certo) o que basta é vc comparar o maior número do que cai nas 02 primeiras células das colunas QTDE X PARCELAS, correto ?

Se sim, simplifiquei seu código "assassinando" as variáveis declaradas como DIM_AS LONG (Qtd e Parcelas), por simplesmente duas fórmulas nas células I21 (para Qtd) e K21 (para Parcelas), sendo que essas fórmulas irá manter o valor do que realmente é valor (número) e vai zerar (0) tudo aquilo que cair diferente de número...
Depois no código só fiz "desligar" as condições DIM, e acionar as condições RANGE nessas células de fórmulas, em troca a MSGBOX vai na localização correta da coluna que localizar o maior valor!! Veja como ficou :

Sub Calcular_Linhas()

Dim Plan As Worksheet
Dim Tabela As ListObject
Dim Col_Qtde As Long, Col_Parc As Long
Dim Qtde As Long, Parcelas As Long
Dim Num_Linhas As Integer

Set Plan = Sheets("MATRIZ")
Set Tabela = Plan.ListObjects("Tabela1")

' Col_Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Column
' Qtde = Tabela.ListColumns("Qtde").DataBodyRange.Cells(1, 1).Value

' Col_Parc = Tabela.ListColumns("Parcelas").DataBodyRange.Column
' Parcelas = Tabela.ListColumns("Parcelas").DataBodyRange.Cells(1, 1).Value

If Range("i21") > Range("k21") Then
MsgBox "O Número de Linhas é igual a " & Range("i21"), vbInformation, "QTDE"
Else
MsgBox "O Número de Linhas é igual a " & Range("k21"), vbInformation, "PARCELAS"
End If

'MsgBox "O Número de Linhas é igual a " & Num_Linhas

End Sub

Agora se não entendi a solicitação, creio que estaria faltando outro tratamento que não mapeei...
Espero ter ajudado!

OBS: Em anexo a planilha que fiz o código...

Abraços
Você não está autorizado a ver ou baixar esse anexo.
SandroLima agradeceu por isso
#66637
Boa noite, Carlos Cirilo.

Foi um a boa alternativa e obrigado pela iniciativa em ajudar. Porém gostaria de buscar uma alternativa dentro da própria macro.

Pesquisei um pouco mais e vi que há como fazer com a Função IsNumeric mas ainda não consegui fazer.

Continuo tentando aqui.
carloscirilo77 agradeceu por isso
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord