Conte o número de caracteres de cada palavra em uma célula no excel

Por exemplo, se eu tiver a frase em uma célula:

The fox jumped twice    

a saída deve ser

3 3 6 5

Eu tentei usar as funções len() e trim() em algumas combinações, mas não consegui encontrar uma solução ainda, estava com medo de que pudesse ser feito apenas usando o VBA.

0
Uma função VBA parece a melhor escolha para este imo.
adicionado o autor Alex K., fonte
Quantas palavras podem estar nas diferentes células (o máximo?) Pode ser possível sem o VBA
adicionado o autor Pierre44, fonte
@AlexK. você está definitivamente certo.
adicionado o autor David Gorgan, fonte
@ Pierre44 Normalmente 3-4 palavras, mas pode ir até 8.
adicionado o autor David Gorgan, fonte

6 Respostas

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

2
adicionado
@DavidGorgan - há algumas maneiras de fazer isso, como mostram as várias respostas. Qualquer um que trabalhe para você como sua resposta, você se importaria de marcá-lo como tal clicando na marca de seleção à esquerda da postagem?
adicionado o autor BruceWayne, fonte
Muito obrigado! Me poupou muito tempo
adicionado o autor David Gorgan, fonte

Experimente este UDF de matriz curta.

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

1
adicionado
Apenas curioso - por que usar Chr (32) em vez de "" ?
adicionado o autor BruceWayne, fonte
Lembrar a tabela ASCII me faz lembrar das minhas raízes.
adicionado o autor Jeeped, fonte
Muito obrigado!
adicionado o autor David Gorgan, fonte

Uma função definida pelo usuário é uma boa ideia, na verdade:

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
  • O Split() não precisa de um argumento com o qual dividir, se for espaço;
  • O Trim() remove o último espaço;
1
adicionado

Apenas para mostrar a resposta horrível que você recebe sem o VBA:

Você pode procurar o "" e depois contar o comprimento entre os diferentes espaços.

=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)))
1
adicionado
Woah, eu realmente aprecio seu esforço xD.
adicionado o autor David Gorgan, fonte

talvez com um loop? Presumindo que as palavras estão separadas por espaços:

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
1
adicionado

Você pode usar a propriedade Characters.Count .

Recebi o seguinte script de aqui .

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

Então, no seu caso, acredito que se você fosse usar a função .split() para criar uma matriz de palavras. Então, durante o looping de cada elemento da matriz, você pode usar a propriedade Characters.count() .

0
adicionado