Количество слов в MS Excel 2010
Есть ли встроенная функция для подсчета количества слов, используемых в ms-excel-2010?
А конкретнее количество слов в выбранном диапазоне?
В настоящее время я копирую свой диапазон в ms-word, чтобы получить количество использованных слов.
Заметка. Меня не интересует количество символов и т. Д., Только количество слов.
3 ответа
Немного покопавшись в форумах, я нашел приведенный ниже код, который работает довольно близко к тому, что я искал:
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
С некоторым текстом в C1, в D1 введите:
=LEN(C1)-LEN(SUBSTITUTE(TRIM(C1)," ",""))+1
Это может быть легко изменено для обработки более чем одной ячейки.
EDIT # 1:
Чтобы сделать это для всего столбца C, используйте:
=SUMPRODUCT(--(LEN(C:C)-LEN(SUBSTITUTE(TRIM(C:C)," ",""))+1)*(C:C<>""))
Пока вы уже нашли решение, попробуйте этот 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