contando uma cadeia de texto em folhas não consecutivas

3

No Excel 2003 Eu tenho uma pergunta sobre a contagem de uma string de texto Homem em folhas chamadas 001R a 900R, na mesma célula C8 de todas as folhas

Eu tenho a seguinte resposta

=SUMPRODUCT(COUNTIF(INDIRECT("'"&ROW(INDIRECT(001&":"&900))&"R"&"'!C8"),"*Man*"))

Isso funciona perfeitamente quando as folhas estão todas presentes. Mas quando usando a fórmula acima quando nem todas as folhas estão presentes ainda, dá um erro, porque eu tenho nomes de planilha como

001R 002R 003S 004R 101R 102S 103R 210R 211R 305R 306S 307R 401R 402R 403S 404R

e assim por diante, para cerca de 300 folhas, e os números de folhas que faltam serão adicionados mais tarde, pois os dados estarão disponíveis.

Existe uma maneira de usar uma fórmula que abranja todos os números para incluir os nomes de planilha presentes e futuros possíveis, para evitar a edição da fórmula toda vez que uma nova planilha for adicionada?

@ Estudante de Gary tem uma resposta muito útil. Mas quero contar o texto em uma lista suspensa com muitos itens e quero contar a ocorrência de cada um deles. Com sua técnica, devo fazer um módulo UDF para cada item; ou existe uma maneira de fazer isso.

Além disso, tenho folhas com S não R anexadas ao seu número. Existe uma maneira de contar isso também? Quer dizer, há uma maneira de fazer

shName = Format(i, "000") & "R"

e

If InStr(1, cel, "Man") as variables entered in =SpecialSum(C8).
Hany0
fonte
qual foi a sua pergunta original? Um link para isso ajudaria a entender o seu atual.
Máté Juhász
Posso perguntar por que: a) Você está "postando" essa postagem em mais de um fórum? b) Você ainda não respondeu a uma excelente resposta feita em outro fórum a partir de 5 dias atrás: ( mrexcel.com/forum/excel-questions/… )
XOR LX
@ Hany0, você criou duas contas? Mesclá-los
pun

Respostas:

0

A seguinte função definida pelo usuário examinará seu bloco de planilhas. Se a folha existe, então a célula de interesse é examinada para ver se contém a corda Homem . Se a string estiver presente, a contagem é incrementada:

Public Function SpecialSum(rin As Range) As Long
   Dim addy As String, i As Long, shName As String
   Dim cel As String
   Application.Volatile

   addy = rin.Address

   For i = 1 To 900
      shName = Format(i, "000") & "R"
      On Error Resume Next
         cel = Sheets(shName).Range(addy).Text
         If Err.Number = 0 Then
            If InStr(1, cel, "Man") > 0 Then SpecialSum = SpecialSum + 1
         Else
            Err.Number = 0
         End If
      On Error GoTo 0
   Next i

End Function

Funções Definidas pelo Usuário (UDFs) são muito fáceis de instalar e usar:

  1. ALT-F11 exibe a janela do VBE
  2. ALT-I ALT-M abre um novo módulo
  3. cole as coisas e feche a janela do VBE

Se você salvar a pasta de trabalho, a UDF será salva com ela. Se você estiver usando uma versão do Excel posterior a 2003, deverá salvar o arquivo como .xlsm ao invés de .xlsx

Para remover o UDF:

  1. abrir a janela do VBE como acima
  2. limpe o código
  3. feche a janela do VBE

Para usar o UDF do Excel:

=SpecialSum(C8)

Onde C8 é a célula de interesse. Para aprender mais sobre macros em geral, veja:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

e

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

e para detalhes sobre UDFs, consulte:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

As macros devem estar habilitadas para que isso funcione!

Isso permitirá que você adicione / remova planilhas sem editar a fórmula.

Gary's Student
fonte