Sub Test()
Dim countMe As Integer
countMe = LEN(SUBSTITUTE(B1,""|"",""""))
Sheets("Data").Range("C1").Value = countMe
End Sub
C1 deve ser igual a 8
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
Sub Test()
Dim countMe As Integer
countMe = LEN(SUBSTITUTE(B1,""|"",""""))
Sheets("Data").Range("C1").Value = countMe
End Sub
C1 deve ser igual a 8
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
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
Tags microsoft-excel vba