Подсчитать всю запятую в выделенном или выделенном тексте

Я хочу посчитать все запятые ",", которые встречаются только в выделенном тексте, после чего я буду использовать Count как Integer запустить loop

Мой вопрос, как мне считать , как показано на рисунке ниже:

Я не знаю, как использовать split а также ubound, что не так со следующим кодом?

Sub CountComma()
Dim x As String, count As Integer, myRange As Range

Set myRange = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End)

 x = Split(myRange, ",")
  count = UBound(x)

  Debug.Print count

End Sub

3 ответа

Решение

Простое разделение будет работать.

x = Split("XXX,XXX,XXX,XXX,XX,XX", ",")
  Count = UBound(x)
  Debug.Print Count

B / C массив начинается с нуля, вы можете взять Ubound номер как есть.

РЕДАКТИРОВАТЬ: Чтобы использовать range,

x = Split(Range("A1").Value, ",")

Чтобы сломать код.

Split("A string value","Delimiter to split the string by")

И если вы хотите одну строку кода, чем,

x = UBound(Split(myRange, ","))

Ваш код неверен в первоначальной декларации x переменная с string типа, так как в последующем утверждении

with x = Split(myRange, ",")

ты бы хотел x держать возвращаемое значение Split() функция, которая является массивом (см. здесь), таким образом Variant тип

так что вы должны использовать

Dim x As Variant

Но вы можете упростить свой код следующим образом

Option Explicit

Sub CountComma()
  Dim count As Integer

  count = UBound(Split(Selection, ","))
  Debug.Print count   

End Sub

поскольку:

  • вам не нужно никаких Range переменная типа для хранения Selection возражать в Selection выбранный диапазон уже (см. здесь)

  • вам не нужно xVariant переменная ни, кормление UBound()функция (которая ожидает массив в качестве первого аргумента) непосредственно с Split() функция, которая, как мы видели выше, возвращает просто массив!

Наконец, я бы выдал альтернативный метод подсчета запятых в диапазоне

Sub CountComma()
  Dim countAs Integer
  count = Len(Selection) - Len(Replace(Selection, ",", ""))

  Debug.Print count
End Sub

Благодаря KyloRen и Синди Мейстер, теперь я могу использовать split а также Ubound для подсчета , в selection.text,

Ниже работает код:

    Sub Count_Words()
        Dim WrdArray() As String, myRange As String

        myRange = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End)

        WrdArray() = Split(myRange, ", ")

        MsgBox ("Total , in the string : " & UBound(WrdArray()))

    End Sub
Другие вопросы по тегам