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

Что не так с логикой в этом коде?
Значение C1 равно 0, когда оно должно быть 1. В ячейке B1 у меня есть Test|Test

3 ответа3

2
Sub Test()

Dim countMe As Integer

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

End Sub

C1 должен быть равен 8

2

В строке countMe не может быть двух знаков равенства, в противном случае вы по существу спрашиваете Excel, равна ли формула в B1 "= LEN(SUBSTITUTE(B1," "" "," "" "))", что нет, так что возвращаем ноль. Вы можете увидеть это, изменив тип данных countMe на Variant, и по умолчанию он будет иметь логическое значение, и вы получите ЛОЖЬ вместо нуля.

Это все равно что сказать:

countMe = 1 = 0

Который всегда будет приводить к 0, потому что 1 <> 0.

Вы пытаетесь использовать формулы приложения в качестве функций VBA. Правильное использование LEN() будет:

countMe = LEN(Range("B1"))

Но для вашей проблемы подсчета количества каналов в B1 используйте код из этого другого поста:Как найти число появлений слэша из строк

2

2 способа посчитать вхождения «|» в строке «Тест | Тест»:

,

1 - Формула

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

,

Подробнее о первом здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .