Ir ao conteúdo
  • Cadastre-se

Excel Contar valores em matriz vba.


Posts recomendados

Bom dia povo!!

Imaginem o seguinte cenario.

 

A1: F1  01 02 05 08 10 16

 

A2:F2 02 05 08 15 18 20

 

Preciso saber qtos numeros na linha2 repetem na linha1

Com formulas uso esta = soma(cont.se(A2:F2;A1:F1)) finalizo com Ctrl+Shift+Enter

 

E neste exemplo tenho o resultado 3

Preciso fazer a mesma coisa com VBA.

Tenho o seguinte codigo:

 

Sub Teste()

Dim Matriz1 As Variant
Dim Matriz2 As Variant
Dim Soma As Integer

Matriz1 = Planilha1.Range("A1:F1")
Matriz2 = Planilha1.Range("A2:F2")

'Soma Deve retornar 3

End Sub

A pergunta é como ter na variavel Soma o valor 3 somente no VBA.

Link para o comentário
Compartilhar em outros sites

Sub TesteV2()
 Dim Matriz1, Matriz2, Soma As Long, i As Long
  Matriz1 = Planilha1.Range("A1:F1")
  Matriz2 = Planilha1.Range("A2:F2")
   For i = 1 To UBound(Matriz1, 2)
    If Not IsError(Application.Match(Matriz1(1, i), Matriz2, 0)) Then
     Soma = Soma + 1
    End If
   Next i
  Debug.Print Soma
End Sub

 

Link para o comentário
Compartilhar em outros sites

Grande mestre @osvaldomp, boa noite!

 

De fato no exemplo dado poderia ser usada a forma simplificada (Soma = [SUM(COUNTIF(A2:F2,A1:F1))]), sem usar o método Evaluate.

Mas como raramente se usa um range fixo e também com o intuito de deixar mais claro o que se pretende obter, minha opção foi pela forma mais "documentada".

Supondo, por exemplo, que no caso do colega @CasaDoHardware rg1 e rg2 fossem dois ranges quaisquer. Nessa situação, a forma simplificada não chega a ser avaliada, ocorrendo erro:

  Soma = [SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))"]  ==> erro: "Tipos Incompatíveis"

 

Já com o uso do Evaluate, a expressão para a variável Soma poderia ser dada por:

    Soma = Evaluate("SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))")

 

que é corretamente avaliada como 3.

Sub Teste()
  Dim Soma As Integer, rg1 As Range, rg2 As Range, a
  Planilha1.Activate
  Set rg1 = [A1:F1]: Set rg2 = [A2:F2]
  Soma = Evaluate("SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))")
End Sub

 

Link para o comentário
Compartilhar em outros sites

Em 26/11/2018 às 00:02, Edson Luiz Branco disse:

Boa noite, colegas!

 

Outra forma, só que sem usar as matrizes:


Sub Teste()
  Dim Soma As Integer
  Planilha1.Activate
  Soma = Evaluate([SUM(COUNTIF(A2:F2,A1:F1))])
End Sub

 

Agradeço sua sugestão mas o exemplo é reduzido para esclarecer a necessidade.

Minha base de dados é muito grande.

Infelizmente intervalos fixos nao atendem

 

Agradeço

adicionado 1 minuto depois
19 horas atrás, Edson Luiz Branco disse:

Grande mestre @osvaldomp, boa noite!

 

De fato no exemplo dado poderia ser usada a forma simplificada (Soma = [SUM(COUNTIF(A2:F2,A1:F1))]), sem usar o método Evaluate.

Mas como raramente se usa um range fixo e também com o intuito de deixar mais claro o que se pretende obter, minha opção foi pela forma mais "documentada".

Supondo, por exemplo, que no caso do colega @CasaDoHardware rg1 e rg2 fossem dois ranges quaisquer. Nessa situação, a forma simplificada não chega a ser avaliada, ocorrendo erro:

  Soma = [SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))"]  ==> erro: "Tipos Incompatíveis"

 

Já com o uso do Evaluate, a expressão para a variável Soma poderia ser dada por:

    Soma = Evaluate("SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))")

 

que é corretamente avaliada como 3.


Sub Teste()
  Dim Soma As Integer, rg1 As Range, rg2 As Range, a
  Planilha1.Activate
  Set rg1 = [A1:F1]: Set rg2 = [A2:F2]
  Soma = Evaluate("SUM(COUNTIF(" & rg2.Address & "," & rg1.Address & "))")
End Sub

 

Vou testar essa opção!!

Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!