none
Preciso de Ajuda: Fórmula do Excel RRS feed

  • Pergunta

  • Bom dia. Preciso de ajuda para achar uma fórmula do excell que copie de um parágrafo somente as vogais em outra linha.

    Eu escrevo em uma linha determinado texto (nomes, palavras...) e gostaria que noutra linha ele copiasse (separasse) somente as vogais do texto da linha de cima. Há alguma fórmula que me ajuda? 

    Desde já agradeço antecipadamente a atenção. Rosane




    • Editado Rosane_M quarta-feira, 5 de agosto de 2015 14:21
    quarta-feira, 5 de agosto de 2015 14:16

Todas as Respostas

  • Vou sugerir um método para realizar esta tarefa, mas com uso de uma função personalizada que você deverá criar através do VBA.

    1º) Pressione ALT+F11 para abrir o VBA e adicione um módulo ao seu projeto.

    2ª) Cole o código abaixo na área de edição do módulo:

    Public Function VALORESDOVETOR(vArray As Variant, _
                                   Optional lSize As Long, _
                                   Optional sSeparator As String = ", ") As Variant
      Dim v As Variant
      Dim lCount As Long
      Dim asOut() As String
      
      If lSize < 0 Then
        VALORESDOVETOR = CVErr(xlErrNum)
        Exit Function
      End If
      
      For Each v In vArray
        If v <> "" Then
          lCount = lCount + 1
          ReDim Preserve asOut(1 To lCount)
          asOut(lCount) = v
          If lCount = lSize Then Exit For
        End If
      Next v
      
      VALORESDOVETOR = Join(asOut, sSeparator)
    End Function

    3º) Feche o VBA e na planilha, inicie a construção da fórmula, que será matricial. Vamos supor que o texto que deseja retirar somente as vogais esteja em A1. Para tentar simplificar um pouco a construção da fórmula, vamos utilizar a função CONT.SE, onde vamos precisar de um intervalo onde você vai digitar as letras que deseja extrair, no seu as vogais. Então, vamos supor que o meu intervalo com as vogais está em "J2:J6". A fórmula a ser inserida ficará:

    =VALORESDOVETOR(SE(CONT.SE(J2:J6;EXT.TEXTO(A1;LIN(INDIRETO("1:"&NÚM.CARACT(A1)));1))=1;EXT.TEXTO(A1;LIN(INDIRETO("1:"&NÚM.CARACT(A1)));1);"");;" - ")

    Essa fórmula deve ser inserida com CRTL+SHIFT+ENTER.

    É possível desenvolver uma fórmula sem o intervalo "J2:J6", mas vai ficar gigante, pois teremos que ter um argumento na fórmula para cada vogal, sendo que na fórmula acima só um CONT.SE já resolve o problema.

    O argumento final da fórmula " - " é o simbolo que vai separar as vogais. Se quiser pode alterar como desejar, por exemplo, com virgula, barra, espaço ou etc dentro das aspas dupla.

    Qualquer dúvida pergunte!


    Rafael Kamimura - http://excelmaniacos.com

    quarta-feira, 5 de agosto de 2015 17:24
  • Obrigada, Rafael. Vou tentar isso!
    quarta-feira, 5 de agosto de 2015 18:34
  • Oi Rafael! Bom dia!

    Não consegui... deu erro de valor!... troquei somente algumas coisas pois o texto que deseja retirar somente as vogais está em D4, então substitui seu A1 por D4 na fórmula. E substitui também J2:J6 por C29:34 onde coloquei as vogais (A, E, I, O, U, Y) para ele buscar. quando dei enter apareceu #valor!. alaguei a célula para ver se era o tamanho que não comportava o resultado... mas continuou com o erro.

    troquei por letras minúsculas para ver se era esse o problema, mas continua dando erro.

    Pode me dizer onde estou errando?

    Obrigada novamente.

    segunda-feira, 10 de agosto de 2015 15:29
  • Oi Rafael! Deu certo!!! Eu não havia compreendido o que você disse com "Essa fórmula deve ser inserida com CRTL+SHIFT+ENTER." rrrsssrss... Fiquei tentando descobrir até que compreendi e agora deu certo sim! Muuuito obrigada!!! Consegui fazer com as consoantes também!!! Muito obrigada! Nota 1000 pra você que conseguiu fazer com que uma professora alfabetizadora, que não entende nada de Excel, conseguisse criar essa planilha!!! Muuuuuuito obrigada!!!
    • Editado Rosane_M segunda-feira, 10 de agosto de 2015 16:17
    segunda-feira, 10 de agosto de 2015 15:47
  • Que bom Rosane!

    Só esqueci de citar que para a função VALORESDOVETOR ficar sempre funcional neste arquivo, você deve salvá-lo com a extensão xlsm (Planilha habilitada para macro do Excel).

    E não esquece de marcar como resposta a minha postagem, assim você contribui para o bom andamento do fórum.

    Abraços!


    Rafael Kamimura - http://excelmaniacos.com

    segunda-feira, 10 de agosto de 2015 16:24
  • Oi Rafael. Estou tentando deixar sem separação (sem o hífen... mas este foi automaticamente substituído por vírgulas). Dá pra deixar somente as letras juntas, sem separação? Ex.: AOEI 

    O que devo mudar? Eu retirei da fórmula o último "pedaço" que estava depois do último ; " - ") e ele substituiu por vírgulas... tirei todo o final e deu erro de valor. 

    O que eu preciso fazer? Me ajude mais uma vez por favor!

    segunda-feira, 10 de agosto de 2015 16:46
  • Substitua " - " por ""

    Rafael Kamimura - http://excelmaniacos.com

    segunda-feira, 10 de agosto de 2015 16:49
  • Oi Rafael muito legal sua ajuda, vi que pode aumentar os caracteres da coluna "J" (podendo utilizar as consoantes ou qualquer letra que quiser)  eu gostaria de saber se é possível sair o resultado dessa contagem por célula, diferente de como mostra no exemplo, separados por hifens, é possível? agradecido.
    segunda-feira, 6 de novembro de 2017 18:17
  • Olá Cláudio,

    Sim, é possível e neste caso não precisa da função personalizada em VBA, pois somente com artifícios matriciais é possível obter o resultado.

    No caso, se quiser o resultado em célula na linha, uma possíbilidade de fórmula é:

    =SEERRO(ÍNDICE(SE(CONT.SE($J$2:$J$6;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1))=1;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1);"");MENOR(SE(SE(CONT.SE($J$2:$J$6;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1))=1;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1);"")<>"";LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));"");COL(A1)));"")

    Se quiser a resposta na mesma coluna é só alterar a última função da fórmula para LIN:

    =SEERRO(ÍNDICE(SE(CONT.SE($J$2:$J$6;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1))=1;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1);"");MENOR(SE(SE(CONT.SE($J$2:$J$6;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1))=1;EXT.TEXTO($A$1;LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));1);"")<>"";LIN(INDIRETO("1:"&NÚM.CARACT($A$1)));"");LIN(A1)));"")

    E Claro, arrastar a fórmula para o número suficiente de células que preencham todas as letras desejadas.

    Abraços!


    Rafael Kamimura - http://excelmaniacos.com

    terça-feira, 7 de novembro de 2017 13:04