Como eu posso contar quanta madeira uma marmota chuck usa o Microsoft Excel?

1

TL; DR Existe algo como grep no Excel que pode me ajudar a contar instâncias inteiras somente de palavras (por exemplo, "wood" mas não "woodchuck") (e talvez suas variações) ?

Então há esse poema, da mamãe gansa:

How much wood could a woodchuck chuck 
If a woodchuck could chuck wood? 
As much wood as a woodchuck could chuck, 
If a woodchuck could chuck wood.

E é um começo, mas ainda não há números concretos.

Então eu encontrei uma postagem muito útil no Exceljet.net que sugere usar um combinação de SUBSTITUTO, LEN e SUMPRODUCT.

Se você imaginar que o texto acima esteja contido nas células A1: A4, minha primeira fórmula ficou assim:

=SUMPRODUCT((LEN(A1:A4)-LEN(SUBSTITUTE((UPPER(A1:A4)),UPPER("wood"),"")))/LEN("wood"))

nota: minha fórmula tem "superior" incluída porque o poema que ela me enviou parece mais com isso

hOw MucH WOod cOuld a WOodCHucK CHUCk 
IF a wOoDchUCk couLD cHuck wood? 
aS muCH wOOD as a WOOdCHuCk coUlD ChuCK, 
iF a woODChUck coulD CHuCK WoOD.

Mas de qualquer forma, o resultado disso é 8, o que está errado.

Eu contei manualmente, existem apenas 4 madeiras e 4 marmotas. Eu não quero contar marmotas, apenas a madeira que eles lançariam (se de fato, eles poderiam jogar madeira).

Agora, minha fórmula atual é assim:

=SUMPRODUCT((LEN(A1:A4)-LEN(SUBSTITUTE((UPPER(A1:A4)),UPPER("wood"),"")))/LEN("wood"))-(SUMPRODUCT((LEN(A1:A4)-LEN(SUBSTITUTE((UPPER(A1:A4)),UPPER("woodchuck"),"")))/LEN("woodchuck")))

E isso tecnicamente funciona! mas a verdade é que eu não estou realmente tentando contar o número de ocorrências da palavra "madeira" em um poema de mãe ganso, eu preciso contar o número de instâncias de muitas palavras diferentes, incluindo aquelas que podem ser transpostas, mal escritas , ou tem espaços aleatórios ou caracteres neles. Eu basicamente preciso de algo como grep dentro do Excel. Será que tal coisa existe? Voltando ao escopo da minha pergunta original, existe uma maneira mais fácil de escrever uma fórmula para contar instâncias de palavra inteira e colocar o resultado em uma célula?

    
por SuziLmrdo 11.09.2018 / 22:14

3 respostas

0

Difícil e complicado com funções de planilha devido à dificuldade de determinar limites de palavras ao lidar com espaços e também várias pontuações.

O mecanismo Expressão Regular do VBA tem um token simples \b que detecta limites de palavras definidos como o ponto onde um caractere word e non-word , ou o início ou o fim da linha, se encontram. Um caractere de palavra é aquele que está no conjunto de [A-Za-z0-9_]

A função VBA:

Option Explicit
'Set Reference to Microsoft VBScript Regular Expressions 5.5
'   or convert to Late Binding

Function ReCount(str As String, Pattern As String, _
    Optional CaseSensitive As Boolean = True) As Long

Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatches   As MatchCollection

    ' Create a regular expression object.
   Set objRegExp = New RegExp

   'Set the pattern by using the Pattern property.
   objRegExp.Pattern = Pattern

   ' Set Case Insensitivity.
   objRegExp.ignoreCase = Not CaseSensitive

   'Set global applicability.
   objRegExp.Global = True

   'Test whether the String can be compared.
    If (objRegExp.Test(str) = True) Then

   'Get the matches.
        Set colMatches = objRegExp.Execute(str)   ' Execute search.
        ReCount = colMatches.Count
    Else
        ReCount = 0
    End If
End Function

Uso:

=ReCount(A6,"\bwood\b")
    
por 12.09.2018 / 14:14
2

Isso funciona para esta instância, você pode precisar adicionar outros SUBSTITUTOS para outra pontuação.

=SUMPRODUCT(--ISNUMBER(SEARCH(" "& "wood" & " "," " & SUBSTITUTE(SUBSTITUTE(A1:A4,".",""),"?","") & " ")))

Isso agora procura a palavra completa cercada por espaços, e é por isso que precisamos remover a pontuação. Como o SEARCH não diferencia maiúsculas de minúsculas, não precisamos do UPPER.

Otextoacimasócontará1porcélula,independentementedonúmerodevezesqueapalavraforencontrada.

Issocontarátudo:

=SUMPRODUCT((LEN(" " & SUBSTITUTE(SUBSTITUTE(UPPER(A1:A4),".", " "),"?"," ") & " ")-LEN(SUBSTITUTE(" " & SUBSTITUTE(SUBSTITUTE(UPPER(A1:A4),"."," "),"?"," ") & " ",UPPER(" wood "),"")))/LEN(" wood "))

    
por 11.09.2018 / 22:26
-1

EstafórmulasimplescontaráoWoodnointervalodedados.

=COUNTIF(E53:E56,"*wood*")

EDITADO:

AocorrênciadeWoodpodesercontadausandoacolunaauxiliartambém.

  • Nacolunadeajuda,escrevaWoodemtodososformatospossíveis.
  • Escrevaestafórmula&preencha.
  • Finalmentesomeacontagem.

=SUMPRODUCT(LEN($E$74:$E$77)-LEN(SUBSTITUTE($E$74:$E$77,F74,"")))/LEN(F74)

  • Ajuste as referências de célula na fórmula conforme necessário.
por 12.09.2018 / 09:42