Dicas do Microsoft Excel é ao Domingo…no Pplware – 6

37 Comentários

Objectivo: Dividir uma string (frase) em partes

Ora vivam caros leitores. Mais um Domingo e mais uma artigo da rubrica “Dicas do Microsoft Excel é ao Domingo….no Pplware”.

Lembramos que esta é uma rubrica “aberta” a todos os leitores que pretendam contribuir. Para tal devem enviar-nos um e-mail com a dica que pretendem ver publicada. Caso tenham também alguma dúvida ou problema a resolver no Excel, deixem essa informação nos comentários para que a comunidade Pplware ajude a resolver.

excel_00

Antes de passar ao tutorial propriamente dito apenas frisar uma situação. Sendo nós um site em português, vamos tentar indicar sempre as funções do excel em português e também a respectiva função em inglês.

São várias as ocasiões em que temos a necessidade de dividir uma string (frase) em várias partes, de modo a que cada uma das partes seja colocado numa célula distinta. Dependendo do “conteúdo” da string, são várias técnicas que podemos usar para fazer essa separação. No entanto, o Excel disponibiliza a função COMPACTAR (TRIM para o excel em inglês) que permite de uma forma muito simples e rápida dividir uma string com base num caracter definido.

Vamos então considerar o seguinte exemplo. O objectivo é separar o nome da localidade que está na primeira coluna e colocar essa informação em separada na coluna B e C, respectivamente.

excel_01

Formula a inserir na coluna B2: =COMPACTAR(ESQUERDA(A2;LOCALIZAR(“,”;A2)-1))

Explicação das funções usadas:

  • COMPACTAR(texto) – Remove todos os espaços de uma cadeira de texto, à excepção de espaços simples entre palavras
  • ESQUERDA(texto;num_caracter) – Devolve o número especificado de caracteres do inicio de uma cadeia de texto
  • LOCALIZAR(texto_a_localizar;no_texto;num_inicial) – Devolve a posição de partida de uma cadeia de texto dentro de outra. Esta função é sensível a palavras maiúsculas e minúsculas.

excel_02

Formula a inserir na coluna C2: =COMPACTAR(DIREITA(A2;NÚM.CARACT(A2)-LOCALIZAR(“,”;A2)))

Explicação das funções usadas ( e ainda não referidas):

  • DIREITA(texto;num_caracter) – Devolve o número de caracteres do fim de uma cadeia de texto
  • NÚM.CARACT(texto) – Devolve o número de caracteres de uma cadeia de texto

excel_03

E está feito. Para as restantes linhas vasta usar o método da actualização ensinado no Actualização da formula de acordo com a linha e coluna.

Por hoje é tudo…esperamos que as dicas sejam úteis e que vos ajudem a dominar o Microsoft Excel. Como referi anteriormente, esta dica está aberta a todos os que pretendam contribuir. Enviem-nos as vossas dicas para ppinto @ pplware .com para publicarmos em próximos artigos.

Artigos relacionados

Download: Ficheiro Excel utilizado (aqui)

Partilhar:
Tags:

Comentários

37

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de JaimeR
    JaimeR

    Excelente!
    Não conhecia esta função e dá bastante jeito!

    1. Avatar de paulo g.
      paulo g.

      Normalmente é necessário fazer uma procura nas funções que se encontra o que se precisa. Por vezes é um conjunto de funções e aí deve-se usar a cabeça…
      http://help.libreoffice.org/Calc/Text_Functions/pt

    2. Avatar de José Augusto
      José Augusto

      Existe uma solução que resolve o problema colocado sem usar funções (M$Excel 2010).
      Suponha-se que (separador “;” ou “;” ou outro)

      B1<= Nome; Idade; Género; Localidade
      B2<= José;18 anos;Masculino;Porto

      Seleccione-se B1:B2

      Menu dados, texto para colunas; delimitado
      Botão seguinte e escolha-se o delimitador (no caso ";")
      Botão concluir ou escolher o tipo de dados para cada coluna.

      O intervalo de células B1:E2 conterá a resposta.

  2. Avatar de Jorge Ferreira
    Jorge Ferreira

    Excelente!!!!!!, PPLWARE está de parabéns. A série de tutoriais é tão boa que as estou a guardar! É o melhor “jornal” diário que existe em Portugal! Transmite cultura, ensinamentos, boa disposição, contrariamente aos outros que nada ensinam lançando noticias de terror e inúteis!

    1. Avatar de Pedro Pinto

      Obrigado Jorge pelos elogios. O espaço Pplware é de todos nós 🙂

  3. Avatar de Pedro A.
    Pedro A.

    Uma das funções que mais uso é o Vlookup. Aqui fica o desafio para um dos próximos artigos.

    1. Avatar de Pedro Pinto

      Boas Pedro A., queres fazer tu esse post? A comunidade Pplware agradece. Abraço

      1. Avatar de Jorge Paulino

        Vê o próximo artigo de VBA que irá sair pois mostra como usar a função VLOOKUP (embora não seja o principal objectivo do artigo)

  4. Avatar de João Pinto

    Eu posso fazer uma “versão portuguesa” do meu artigo, do meu blog:

    http://www.excel-user.com/2009/10/vlookup-get-value-based-on-another.html

    Querem?

    João Pinto

    1. Avatar de Pedro Pinto

      vamos lá João. Encontrar as funções em PT já é por si um desafio 🙂

    2. Avatar de Miguel Goyanes
      Miguel Goyanes

      Viva João.

      Parabéns pelo blog.
      Guardei logo tal é o manancial de de informação.

    1. Avatar de Pedro Pinto

      pessoalmente penso que é má política a tradução das funções por parte da Microsoft…ou então ser possível usar simultaneamente em vários idiomas

      1. Avatar de JC
        JC

        100% de acordo. Seria muito mais prático usar sempre o mesmo nome de funções, independentemente da versão. Assim, obriga a um maior esforço de aprendizagem, especialmente para quem migrou de outras versões ou de outros programas semelhantes.

    2. Avatar de José Augusto
      José Augusto

      Em vez de
      “Mais algumas formulas em PT vs ING”
      Deve ler-se
      “Mais algumas formulas em BR vs ING”

  5. Avatar de JC
    JC

    Excelente dica!
    É bastante prática.

  6. Avatar de João Pinto

    Eu tenho ambos os “language packs” instalados do Office 2010 pelo que posso fazer os ficheiros/fórmulas em inglês, que é o que estou habituado a trabalhar, e depois alterar a linguagem do Office para PT e ver os respectivos nomes das funções e dos comandos. Assim é bem mais fácil 🙂

  7. Avatar de paulo G.
    paulo G.

    Para quem tem LibreOffice aqui vídeo (http://youtu.be/PZg3Xl7lsjg) que serve perfeitamente para quem tem M$Excel. Em termos de tradução das funções, a versão de Calc para windows está totalmente traduzida para português, enquanto que a versão que estou a utilizar na minha distribuição Linux (Ubuntu) apenas algumas funções estão em Português. Como podem verificar, em relação ao M$Excel, a única função como nome diferente é: Procurar/Localizar

  8. Avatar de Vinicius
    Vinicius

    excelente dica, mas acho um pouco estranha a tradução de formula da MS. Aqui no Brasil a forma se escreve “Arrumar” e ficando algo do tipo “ARRUMAR(ESQUERDA(A3;PROCURAR(“,”;A3)-1))”

  9. Avatar de bintoito
    bintoito

    Pessoal! Ajudinha sff 😉

    Queria criar umas caixas de texto em que na mesma célula dê para o utilizador escolher numa espécie de drop-down as várias hipóteses, por exº:
    Em A1 (cabeçalho): Tipo de combustível
    B1: o tal drop-down com: gás natural, propano, nafta, etc….

    alguém que me aponte para uns links? é que nem sei bem como isto se chamará…(será uma coisa deste género o que preciso? http://www.techrepublic.com/blog/msoffice/create-an-excel-data-entry-form-that-includes-check-boxes/203)

    abraço

    1. Avatar de João Pinto

      Podes dar uma vista de olhos ao meu artigo sobre “Cascading Validation Lists” aqui:

      http://www.excel-user.com/2011/02/cascading-validation-lists.html

      A ideia é teres, por exemplo, uma lista de países, escolhes um, e depois, numa segunda lista, aparecem-te apenas cidades desse país.

      Espero que ajude.

      João Pinto

    2. Avatar de José Augusto
      José Augusto

      Julgo que a solução pretendida passa por validar a célula ou células que vão conter o valor escolhido.

      Primeiro devemos criar (na mesma folha) uma tabela com os valores posíveis (gás natural, propano, nafta, …)
      Imagine-se o intervalo J1:J3 com esses valores

      Com a célula B1 seleccionada ir a dados; validação de dados. No separador definições defina o critério de validação por lista e no campo origem indique-se $J$1:$J$3

      Se entender necessário, utilize os outros dois separadores para dar aspecto profissional à validação.

  10. Avatar de bintoito
    bintoito

    Bom dia a todos,

    Muito obrigado pela ajuda. A ver se ainda durante a manhã consigo dedicar-me a explorar as soluções por vós propostas.
    Qualquer dúvida, já sei a quem recorrer!

    Os meus cumprimentos,
    Vitor Ferreira

  11. Avatar de bintoito
    bintoito

    Muito obrigado a ambos! para já a solução do José Augusto está a chegar-me para as encomendas, mas lá mais para a frente acho que tb tenho de a do João Pinto 😉

    abraço e os meus cumprimentos

  12. Avatar de bintoito
    bintoito

    Caro João Pinto,

    No seguimento do conceito de cascading, será que o excel permite o seguinte “twist”:
    Empresa com N produtos, onde escolho N pelo método do José Augusto. Depois, mediante N, apareciam-me ao lado (do tipo eram inseridas automaticamente) N células novas onde eu podia fazer a descriminação destes produtos.
    Se N fosse 1, só me surgia 1 célula nova, se N, N células novas na mesma linha (estou a fazer 1 linha para cada empresa)…
    é que assim ficava + “jeitosinho” e não tinha que deixar N células em branco para serem ou não preenchidas.

    Isto será exequível?

    Desde já os meus agradecimentos a qualquer pointer que me possa dar 😉

    1. Avatar de João Pinto

      Isto só será possível de fazer com código! Mas a sua ideia é na 1ª coluna selecionar N, conforme o valor de N, acrescentar x colunas para preencher? E o resto das células? Ficavam protegidas? É que as colunas já lá estão todas, queria apenas permitir preencher x colunas, dependendo do valor de N escolhido?

  13. Avatar de bintoito
    bintoito

    Viva,

    Pois, já suspeitava que teria de levar código…mas, e se ao invés de ter de criar/adicionar células, se recorresse à função hide? – reservava umas quantas células que só apareceriam consoante o N seleccionado anteriormente. Será que isso simplificava as coisas?

    Caro João Pinto, novamente, o meu muito obrigado

    1. Avatar de João Pinto

      Como lhe digo, as colunas estão lá todas…e fazia o hide a todas as colunas até ao fim da folha?

  14. Avatar de bintoito
    bintoito

    Viva,

    Eu não estou a fazer por colunas, é por linhas (não sei se isso faz alguma diferença. Do género:
    Em A1 tinha a tal célula com as N hipóteses (com N a ser feito pelo outro método). Escolhia, por ex 2 e em A2 e A3 (que estavam escondidas/reservadas), elas então apareceriam para o utilizador poder inserir os dados
    vou inventar aqui largo, mas qqr coisa do tipo: If A1 = N com N=1, then…qqr coisa…unhide(B1:D1)

    Peço desculpa pelas asneiradas que aí hei-de ter posto, mas programação não é de td o meu forte…

  15. Avatar de bintoito
    bintoito

    Oh, agora é que estou a fazer um pouco de think ahead e isto não vale a pena…
    mesmo que conseguisse isto de esconder as células “on-demand”, se por ex na linha 1 tiver uma empresa com 5 prods, vou ter 5 células para isso; mas já se a empresa 2 (na linha 2) só tiver 1 produto (que iria “mostrar apenas 1 célula”, vão-me aparecer, muito provavelmente, na mesma 6 células por causa da empresa anterior, estragando-me o “arranjinho”

    Deixe lá João Pinto, não se preocupe mais com isto!
    Tenho é de lhe agradecer imenso pelo apoio prestado 😉
    Grande abraço

  16. Avatar de hm
    hm

    Boas e boas dicas!
    Tenho tentado sem sucesso adaptar isto que aqui está a uma necessidade que tenho, passo a explicar, tenho um xls com diversa legislação e na coluna A tenho uma abreviatura do tipo de diploma legal (texto) por exemplo RCM para Resolução do Conselho de Ministros, na coluna B tenho a referência desse diploma, por exemplo 22/99, tratar-se-ia então da Resolução do Conselho de Ministros nº 22/99, mais adiante pretendia de forma automatica o nome que vou atribuir ao ficheiro, neste caso pretendia que ficasse RCM_22_99.
    Portanto o que pretendia era concatenar as duas primeiras colunas separadas por um “_” mas queria ainda que os valores da coluna B fossem também separados por um “_”, usando a função de separar o texto para colunas consigo separar o “22/99” e depois fazer um concatenar simples, mas o que pretendia era obter o mesmo resultado sem estar a usar novas colunas.
    Alguma dica?
    Obrigado.

    1. Avatar de hm
      hm

      Esqueci-me de um “pormenor”, o número de caracteres dos dois elementos do número do diploma não é fixo, isto é, o exemplo que dei “22/99” seria algo como localizar e devolver os dois caracteres à esquerda e à direita do “/” mas posso ter algo como “145352/2006″, precisava então de alguma coisa que devolvesse tudo que (pseudocódigo):
      =concatenar (A1;”_”;o que está em B1 à esquerda do “/”;”_”;o que está em B1 à direita do “/”)
      😛

      1. Avatar de José Augusto
        José Augusto

        Use a fórmula:

        =A1 & “_” & ESQUERDA(B1;PROCURAR(“/”;B1;1)-1) & “_” & DIREITA(B1;NÚM.CARACT(B1)-PROCURAR(“/”;B1;1))

        que transforma A1=”RCM” e B1=”22/99″ em C1=”RCM_22_99″

        Julgo que era isto que pretendia.

        1. Avatar de hm
          hm

          Infelizmente continua a mostrar o erro:
          #Nome?

          🙁

  17. Avatar de hm
    hm

    = “Obrigado” & “Miguel Goyanes” & “e” & “José Augusto”

    Com uma “mistela” das ajudas dos dois funcionou 🙂

  18. Avatar de Orson Galvão
    Orson Galvão

    Divulgue esta dica, por favor:

    Para completar com espaços a direita de uma célula qualquer utilize o seguinte, substituindo o ‘cc’ pelo endereço da célula de origem do string desejado e ‘nn’ pelo tamanho total do string desejado:

    =ESQUERDA(cc&REPT(” “;nn);nn)

    Situação prática: você precisa gerar registros para um arquivo TXT com campos de tamanho fixo em que entrem nomes de pessoas e outras informações como:
    col 1 até col 5 – matricula (numérico com mascara “00000”
    col 6 até col 35 – nome (alfabético de tamanho variável com espaços a direita)
    col 36 até col 40 – valor da mensalidade (com mascara “00000”, sendo as duas ultimas casa as decimais)
    Ex.
    Registros com o resultado esperado, que vai ser colado no arquivo TXT (recomendo que utilizem o notepad2 para o arquivo TXT pois é infinitamente melhor que o notepad da MS)

    “00111JOJOBA GURUPI 12234”
    “00993MARICOTI KATITA TUMB 14534″

    Os dados dos campos serão obtidos nas colunas A (matricula), B (nome) e C (mensalidade), linhas 1 e 2

    111 |JOJOBA GURUPI | R$122,34
    993 |MARICOTI KATITA TUMB | R$14534

    Para obtermos os strings, na coluna D linha 1 colocamos as seguintes fórmula:

    TEXTO(A1;”00000″)&ESQUERDA(B1&REPT(” “;30);30)&TEXTO(C1*100;”00000”)

    para finalizar, copia-se o conteúdo de D1 para D2. Feito isto é só copiar o conteúdo da coluna D e colar no arquivo TXT. cada linha já é finalizada com CR+LF. Se estiver usando o notepad2, ele permite que as linhas sejam finalizadas no modo Unix (só LF) ou Mac (só CR)

    Abraços