Como calcular o número de ocorrências de uma seqüência de caracteres na pasta de trabalho inteira?


2

Eu quero calcular o número de vezes que uma string especificada aparece em minha pasta de trabalho inteira em alguma coluna. Eu tentei esta fórmula =COUNTIF(sheet1:sheetn!C2:C150; "*string*") Mas isso torna o #VALUE! erro.

O que há de errado com a minha fórmula? Como posso obter essa contagem?

Respostas:


2

Aqui é o equivalente VBA código para contar o número de células contendo pelo menos um corda

Sub StringCounter()
    Dim r As Range, s As String, i As Long
    s = "*string*"
    For Each sh In Sheets
        Set r = sh.Range("C2:C150")
        i = i + Application.WorksheetFunction.CountIf(r, s)
    Next sh
    MsgBox i
End Sub

EDIT # 1:

Aqui está o código para contar o número de cordas Contará vários corda dentro de uma única célula:

Sub StringCounter_II_The_Sequel()
Dim r As Range, s As String, i As Long
Dim rr As Range, L As Long
s = "string"
L = Len(s)
For Each sh In Sheets
    Set r = sh.Range("C2:C150")
        For Each rr In r
            txt = rr.Text
            If InStr(txt, s) > 0 Then
                i = i + (Len(txt) - Len(Replace(txt, s, ""))) / L
            End If
        Next rr
Next sh
MsgBox i
End Sub

EDIT # 2:

o matemática funciona da seguinte maneira:

  1. dizem que há três corda em uma célula e o número de caracteres nessa célula é 100
  2. a substituir remove todas as três instâncias e o novo comprimento é de 82
  3. o subtrair resulta em 18
  4. a divisão resulta em 3 (porque a palavra corda tem 6 caracteres de comprimento)

Obrigado Gary. Mas se corda aparece muitas vezes em uma célula, é contada apenas uma vez! porque ?
mounaim

@mounaim Veja meu EDITAR # 1
Gary's Student

Você pode por favor explicar a cláusula if?
mounaim

@mounaim O E SE garante que haja pelo menos um corda em uma célula antes de executar qualquer matemática demorada com essa célula.
Gary's Student

Eu estava de fato falando sobre a declaração interna desculpe Gary
mounaim

1

Você precisa definir cada intervalo para cada folha, por exemplo

COUNTIF(Sheet1!C2:C150,"*string*")+COUNTIF(Sheet2!C2:C150,"*string*") ...

Se você quer ser esperto, você pode colocar cada folha na coluna A, e na coluna B usar

=COUNTIF(INDIRECT("Sheet"&A1&"!A1:A5"),"*string*")

Ou o que for adequado ao seu esquema de nomenclatura. Em seguida, arraste-o para baixo para cada contagem e some isso.


Eu tenho muitas folhas: / não há uma maneira de evitar a fórmula longa?
mounaim

@mounaim você poderia escrever uma macro. Ou tem uma coluna de referência para cada folha, que eu adicionei à resposta.
Raystafarian

Vou tentar escrever uma macro para isso desde que eu sou iniciante no VBA
mounaim

1

Você pode escrever uma função definida pelo usuário bastante simples no VBA para fazer isso. Cole o seguinte código em um novo módulo (para obter instruções sobre como fazer isso, consulte esta postagem ):

Public Function WBCountString(SearchFor As String, InRange As Range) As Long
Dim wbcs As Long, rng As Range, addr As String
For Each s In Worksheets
    'Limit search area to specified range.
    addr = InRange.Address
    Set rng = s.Range(addr)
    'Keep a running tally of the number of instances of the word in the specified range on each sheet.
    wbcs = wbcs + Application.WorksheetFunction.CountIf(rng, "*" & SearchFor & "*")
Next s
WBCountString = wbcs
End Function

Depois de ter esse código em um módulo, você pode usar a função da planilha. Por exemplo, para contar o número de instâncias de potato na coluna C em todas as planilhas, você usaria a seguinte sintaxe.

=WBCountString("potato",C:C)

Estou tendo um erro, quando coloco a função em alguma nova planilha com intervalo C: C, o Excel contorna a coluna C da planilha ativa e retorna apenas 0, acho que algum problema de referenciamento está acontecendo aqui
mounaim

@mounaim Você não pode colocar a fórmula na coluna C, senão ela introduzirá um erro de referência circular. Suas opções são se referir a uma parte da coluna C (por exemplo, C1:C20 ) e coloque sua fórmula fora desse intervalo, ou apenas coloque sua fórmula em outro lugar na folha.
Excellll

OK eu entendi agora e eu corrigi o erro :) apenas uma observação, se minha string aparece duas vezes em uma célula, é computada apenas uma vez :) por quê?
mounaim

@mounaim Estou usando o COUNTIF, que conta as células. Eu (erroneamente) assumi do que você tinha tentado que as células contáveis ​​seriam suficientes.
Excellll

Ah eu vejo ! pode ser que eu não tenha mencionado claramente, mas é isso que eu queria fazer
mounaim
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.