Подсчитать количество символов каждого слова в ячейке в Excel - PullRequest
0 голосов
/ 17 октября 2018

Например, если у меня есть предложение в одной ячейке:

The fox jumped twice    

, вывод должен быть

3 3 6 5

Я пытался использовать функции len() и trim()в нескольких комбинациях, но пока не удалось найти решение, боялся, что это можно сделать только с помощью VBA.

Ответы [ 6 ]

0 голосов
/ 17 октября 2018

Просто чтобы показать ужасный ответ, который вы получаете без VBA:

Вы можете найти "" и затем посчитать длину между различными пробелами.

=find(" ",B3,1)-1&" "&
find(" ",B3,find(" ",B3,1)+1)-(find(" ",B3,1))-1&" "&
find(" ",B3,find(" ",B3,find(" ",B3,1)+1)+1)-(find(" ",B3,find(" ",B3,1)+1)-(find(" ",B3,1))+find(" ",B3,1))-1&" "&
LEN(B3)-(find(" ",B3,1)+find(" ",B3,find(" ",B3,1)+1)-(find(" ",B3,1))+find(" ",B3,find(" ",B3,find(" ",B3,1)+1)+1)-(find(" ",B3,find(" ",B3,1)+1)-(find(" ",B3,1))+find(" ",B3,1)))
0 голосов
/ 17 октября 2018

Определяемая пользователем функция - хорошая идея, действительно:

Public Function CountWords(inString As String) As String

    Dim i As Long
    Dim myArr As Variant: myArr = Split(inString)
    For i = LBound(myArr) To UBound(myArr)
        CountWords = CountWords & " " & Len(myArr(i))
    Next i
    CountWords = Trim(CountWords)

End Function
  • Split() не требуется аргумент, с которым нужно разделиться, если это пробел;
  • Trim() удаляет последний пробел;
0 голосов
/ 17 октября 2018

Попробуйте этот UDF на основе короткого массива.

Option Explicit

Function wordLength(str As String)
    Dim i As Long, arr As Variant
    arr = Split(str, Chr(32))
    For i = LBound(arr) To UBound(arr)
        arr(i) = Len(arr(i))
    Next i
    wordLength = Join(arr, Chr(32))
End Function

enter image description here

0 голосов
/ 17 октября 2018

может с петлей?Предполагая, что слова разделены пробелами:

Sub CountChars
    Dim strWord as Variant, lenWord as Long, StrCount as String

    For Each strWord in Split(mysheet.range("A1")," ")
        lenWord = len(strWord)

        'if you wish to display side by side:
        StrCount = StrCount & cstr(lenword) & " "
    Next
    StrCount = Trim(StrCount) 'To remove the space at the end from the last loop
    Debug.print StrCount

End Sub
0 голосов
/ 17 октября 2018
Function count_Chars(ByVal target As Range)
Dim splt

splt = Split(target, " ")

Dim i As Long
Dim output As String

For i = LBound(splt) To UBound(splt)
    output = output & " " & Len(splt(i))
Next i

count_Chars = TRIM(output)
End Function

enter image description here

0 голосов
/ 17 октября 2018

Вы можете использовать свойство Characters.Count .

Я получил следующий скрипт из здесь .

Sub MakeSuperscript() 
 Dim n As Integer 

 n = Worksheets("Sheet1").Range("A1").Characters.Count 
 Worksheets("Sheet1").Range("A1").Characters(n, 1) _ 
 .Font.Superscript = True 
End Sub

Так что в вашем случае я считаю, что если бы вы использовали функцию .split() для создания массиваслова.Затем при циклическом просмотре каждого элемента массива вы можете использовать свойство Characters.count().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...