Есть ли встроенная функция для подсчета количества слов, используемых в ?

А конкретнее количество слов в выбранном диапазоне?

В настоящее время я копирую свой диапазон в чтобы получить количество использованных слов.

Заметка. Меня не интересует количество символов и т.д., Только количество слов.

3 ответа3

3

С некоторым текстом в C1, в D1 введите:

=LEN(C1)-LEN(SUBSTITUTE(TRIM(C1)," ",""))+1

Это может быть легко изменено для обработки более чем одной ячейки.

EDIT # 1:

Чтобы сделать это для всего столбца C, используйте:

=SUMPRODUCT(--(LEN(C:C)-LEN(SUBSTITUTE(TRIM(C:C)," ",""))+1)*(C:C<>""))

1

Немного покопавшись в форумах, я нашел приведенный ниже код, который работает довольно близко к тому, что я искал:

Sub CountWords()

    Dim MyRange As Range
    Dim CellCount As Long
    Dim TotalWords As Long
    Dim NumWords As Integer
    Dim Raw As String

'ACTIVE SELECTION
    Set MyRange = ActiveSheet.Range(ActiveWindow.Selection.Address)
    TotalWords = 0

    For CellCount = 1 To MyRange.Cells.Count

    If Not MyRange.Cells(CellCount).HasFormula Then

    Raw = MyRange.Cells(CellCount).Value
    Raw = Trim(Raw)
    If Len(Raw) > 0 Then

    NumWords = 1

    Else

    NumWords = 0

    End If

    While InStr(Raw, " ") > 0
    Raw = Mid(Raw, InStr(Raw, " "))
    Raw = Trim(Raw)
    NumWords = NumWords + 1

    Wend

    TotalWords = TotalWords + NumWords

    End If

    Next CellCount

    MsgBox "There are " & TotalWords & " words in the selection."

End Sub
1

Пока вы уже нашли решение, попробуйте этот UDF. Не всесторонне проверено все же. Это обеспечит, чтобы лишние пробелы на всякий случай (например, случайно введенные более одного пробела между словами) не учитывались при подсчете слов, а также учитывался результат из ячеек формулы.

Public Function GetWordCount(r As Range) As Long

   Dim strTest As String
   Dim strArray() As String
   Dim intCount As Long
   Dim WordCount As Long
   WordCount = 0

   For Each cell In r

    strTest = cell.Value
    strArray = Split(strTest, " ")

    For intCount = LBound(strArray) To UBound(strArray)
       strArray(intCount) = Trim(strArray(intCount))
    Next

    For intCount = LBound(strArray) To UBound(strArray)
       If strArray(intCount) = "" Then
       Else
         WordCount = WordCount + 1
       End If
    Next

    Next cell
   GetWordCount = WordCount

End Function  

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