Como contar ocorrências de strings em uma célula usando o VBA

1
Sub Test()    
    Dim countMe As Integer    
    countMe = Sheets("Data").Range("B1").Formula = "=LEN(SUBSTITUTE(B1,""|"",""""))"
    Sheets("Data").Range("C1").Value = countMe    
End Sub

O que há de errado com a lógica neste código?
O valor C1 é 0 quando deveria ser 1. Na célula B1, tenho Test|Test

    
por thes4s 02.09.2015 / 03:06

3 respostas

2

Sub Test()

Dim countMe As Integer

  countMe = LEN(SUBSTITUTE(B1,""|"",""""))
  Sheets("Data").Range("C1").Value = countMe

End Sub

C1 deve ser igual a 8

    
por 02.09.2015 / 03:56
2

A linha countMe não pode ter dois sinais de igual, caso contrário você está essencialmente perguntando ao Excel se a fórmula em B1 é igual a "= LEN (SUBSTITUTE (B1," "|" "," "" "))" , o que não é, por isso é returnig zero. Você pode ver isso alterando o tipo de dados de countMe para Variant, e o padrão será Booleano e você receberá um FALSE em vez de um zero.

É como dizer:

countMe = 1 = 0

Que sempre resultará em 0, porque 1 < > 0.

Você está tentando usar fórmulas de aplicativo como funções do VBA. O uso adequado de LEN () seria:

countMe = LEN(Range("B1"))

Mas, para o seu problema de contar o número de canos em B1, use o código dessa outra postagem: Como encontrar o número de ocorrências de barra de um strings

    
por 02.09.2015 / 04:04
2

2 maneiras de contar ocorrências de "|" na string "Teste | Teste":

.

1 - Fórmula

Sub Test1()
    Dim countMe As Long

    With Sheets("Data")

        .Range("C1").Formula = "=LEN(B1)-LEN(SUBSTITUTE(B1,""|"",""""))"    'your formula

        countMe = .Range("C1").Value2   'count will be "1"

        .Range("D1").Value = countMe

    End With
End Sub

.

2 - VBA

Sub Test2()
    Dim countMe As Long

    With Sheets("Data")

        .Range("E1").Value2 = UBound(Split(.Range("B1").Value2, "|"))

        countMe = .Range("F1").Value2   'count will be "1"

        .Range("F1").Value2 = countMe

    End With
End Sub

.

Mais detalhes sobre o primeiro aqui

    
por 02.09.2015 / 04:12