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

31 Comentários

Por Leandro Jekimim Goulart

Fórmulas de Matriz – Array Formulas (Parte II)

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

O Excel possui muitos recursos desconhecidos e pouco documentados, como as funções BDContar e a SOMARPRODUTO já apresentada em artigos anteriores. No ultimo tutorial ensinamos demos um exemplo básico de como usar Fórmulas de Matriz. Hoje vamos apresentar um exemplo mais complexo, para isso vamos considerar a seguinte informação:

excel_05

Suponha que queremos saber o total de vendas do vendedor Barnhill. Para isso basta usarmos a função SE, e a fórmula fica:

=SOMA(SE(B2:B12=“Barnhill”;D2:D12*E2:E12))

Acompanhe o passo-a-passo da execução desta fórmula.

excel_01

 

Agora um exemplo mais completo. Vamos fazer um relatório mestre-detalhe, onde possamos listar todas as vendas de um determinado vendedor. Desta vez vamos usar a fórmula abaixo.

=SEERRO(ÍNDICE($A$2:$E$12; MENOR(SE(B2:B12=“Barnhill”;LIN(A2:A12));LIN(1:3))-1; 3);””)

Como o retorno desta fórmula é uma matriz de 3 elementos, você deve:

  • Selecionar 3 células no Excel
  • Colar a fórmula acima
  • Pressionar CTRL + SHIFT + ENTER

Antes de explicar a fórmula é preciso explicar as novas funções que usamos aqui:

  • LIN(A2:A12) retorna uma matriz {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}. Usaremos como parâmetro para a função ÍNDICE.
  • LIN (1:3) retorna uma matriz {1, 2, 3}, usaremos apenas como parâmetro para a função MENOR.
  • MENOR (matriz, k) será usado para selecionar dentre os resultados da função SE até três vendas do vendedor selecionado. O parâmetro matriz é o resultado da função SE (ver passo 4 na tabela acima), e o parâmetro k é a matriz de LIN que nos permitirá selecionar o primeiro, segundo e terceiro valor da matriz resultante da função SE.
  • ÍNDICE busca um elemento em uma matriz dado a linha e coluna do elemento. A matriz informada ($A$2:$E$12) é a própria tabela de vendas, a linha será o resultado da função MENOR e a coluna na fórmula acima é 3, que é a coluna “Produto”.
  • SEERRO será usada para mostrar um valor vazio (“”) quando o vendedor possui menos que três vendas

O que a fórmula faz:

excel_03

Juntando todos os exemplos temos o seguinte resultado. Neste exemplo abaixo basta trocar o nome do vendedor na célula A16 e automaticamente serão mostradas as suas vendas abaixo. Os campos Email e Cidade usam a função PROCV (já detalhada em artigos anteriores) para trazer seus dados da folha de cálculo Vendedor.

excel_06

Como pudemos ver, Fórmulas de Matriz são extremamente poderosas, podem poupar um grande trabalho, evitar fórmulas intermediárias e sub-totais, além de permitir funcionalidades inéditas no Excel como relatórios metre-detalhe. Porém se não usadas com cuidado podem ser muito confusas e gerar resultados indesejados.

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.

Outros artigos sobre Excel

  1. Operações básica: SOMA, MÉDIA, MÁXIMO, MINIMO
  2. Actualização da formula de acordo com a linha e coluna
  3. Referências fixas
  4. Utilização de formulas e valores em várias folhas
  5. Destacar facilmente valores em Excel
  6. Dividir uma String (frase) em partes
  7. Função VLOOKUP (PROCV em Português)
  8. Converter formulas em números
  9. Criar listas de números aleatórios
  10. Funções lógicas do Excel: SE(), E(), OU()
  11. Adicionar totais a um gráfico de colunas empilhadas
  12. Formatar comentários
  13. Funções Financeiras (Funções PGTO() e TAXA())
  14. função DIA.DA.SEMANA e a função TEXTO
  15. Esconder informação na hora de imprimir
  16. Listas Personalizadas
  17. Preencher células em branco
  18. Mover, copiar ou colar os dados na sua folha de Excel
  19. Criar modelos de gráficos personalizados
  20. Adicionar dados a um gráfico
  21. Funcionalidades “escondidas” do Excel
  22. Definir Nomes para as células
  23. Função SOMARPRODUTO()
  24. Soma Automática
  25. Como lidar com datas num gráfico
  26. Função ORDEM
  27. Fixar os dados de um gráfico
  28. Proteger uma folha de Excel
  29. Validação de dados…Combobox com dados
  30. Concatenação e funcionalidade Localizar e Substituir
  31. Ordenação de valores
  32. Como criar uma Macro
  33. Função Compactar
  34. Definir a área de impressão dinamicamente
  35. Percentagem variável
  36. MAIÚSCULAS, MINÚSCULAS ou INICIAL.MAIÚSCULA e Função Potência
  37. Tabelas dinâmicas
  38. Trabalho colaborativo
  39. Activar e utilizar um suplemento
  40. Gráficos sparkline
  41. Personalizar Gráficos sparkline para mostrar tendências de dados
  42. Definir e utilizar nomes em fórmulas
  43. Função BDContar
  44. Função Não
  45. Fórmulas de Matriz – Array Formulas (Parte I)

Partilhar:
Tags:

Comentários

31

Deixe um comentário

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

  1. Avatar de José Augusto
    José Augusto

    As fórmulas matriciais sempre foram do meu agrado por condensarem múltiplas operações e originarem soluções bem engenhosas e úteis. No exemplo, o total de vendas do vendedor Barnhill pode ser obtido por várias fórmulas matriciais.
    Considerando B15<- “Barnhill” a fórmula proposta

    =SOMA(SE(B2:B12=$B$15;D2:D12*E2:E12)) pode ser escrita como:

    =SOMA(SE(B2:B12=$B$15;D2:D12;0)*E2:E12)
    =SOMARPRODUTO((B2:B12=$B$15)+0;D2:D12;E2:E12)
    =SOMA(((B2:B12=$B$15)+0)*D2:D12*E2:E12)
    =SOMA(D2:D12*E2:E12*(B2:B12=$B$15))

  2. Avatar de joao
    joao

    ola
    ao executar a primeira funçao… =SOMA(D2:D12)*(E2:E12)
    devolve-me.. #Valor!
    acontece o mesmo nas funçoes seguintes, alguma ideia do que possa estar errado…

    1. Avatar de José Augusto
      José Augusto

      Olá João

      Julgo que se está a esquecer de validar as fórmulas com CTRL+SHIFT+ENTER em vez de usar apenas ENTER.

      1. Avatar de joao
        joao

        obrigado
        era isso mesmo..

    2. Avatar de Paulo
      Paulo

      Isso tem de estar como matriz.

  3. Avatar de joao
    joao

    ola Jose
    seria possivel disponibilizar aqui o ficheiro?
    eu faço sempre os exemplos apresentados mas por vezes nao chego aos mesmos resultados, devo estar a fazer algo errado nas formulas…
    agradecido

    1. Avatar de José Augusto
      José Augusto

      Com base no ficheiro disponibilizado pelo colaborador Leandro Jekimim Goulart, introduzi as fórmulas referidas no meu primeiro post e tomei a liberdade de alterar outras.
      Excel_Matriz

      1. Avatar de Leandro Jekimim Goulart

        Olá José,

        Boa contribuição! Já vi muitos recorrerem ao Access para fazer algo um pouquinho mais avançado (como um relatório mestre-detalhe), recursos que às vezes as funções matriciais resolvem.

        Abraço!

  4. Avatar de elizandro
    elizandro

    como ficaria a fórmula se eu quisesse as 3 vendas do vendedor “sanchez” porém, que aparecessem em ordem de maior venda para a menor??

    1. Avatar de José Augusto
      José Augusto

      Olá Elizandro
      Use apenas a seguinte fórmula matricial aplicada ao nº de linhas que entender necessárias mas obrigatoriamente a quatro colunas (seleccione por exemplo [K23:N33])
      =SE.ERRO(ÍNDICE($A$2:$E$12;CORRESP(MAIOR(–($B$2:$B$12=$A$16)*–($E$2:$E$12);LIN(A1:A11));$E$2:$E$12;0); {1\3\4\5});””)
      Não se esqueça de validar com CTRL+SHIFT+ENTER
      Cumprimentos

  5. Avatar de José Augusto
    José Augusto

    Segue novamente a fórmula pois os dois sinais menos seguidos antes de e depois de ($B$2:$B$12=$A$16)* ficaram reduzidos a apenas um travessão antes e um depois.
    =SE.ERRO(ÍNDICE($A$2:$E$12;CORRESP(MAIOR(–($B$2:$B$12=$A$16)*–($E$2:$E$12);LIN(A1:A11));$E$2:$E$12;0); {1\3\4\5});””)
    em alternativa utilize a fórmula
    =SE.ERRO(ÍNDICE($A$2:$E$12;CORRESP(MAIOR(0+($B$2:$B$12=$A$16)*($E$2:$E$12);LIN(A1:A11));$E$2:$E$12;0); {1\3\4\5});””)

  6. Avatar de ELIZANDRO
    ELIZANDRO

    Augusto.. .bom dia!
    colei as duas fórmulas.. dei uma conferida… tive o cuidado de transformá-la em matricial.. porém apresentou em todos os campos o erro #NOME?

    1. Avatar de José Augusto
      José Augusto

      Qual a versão de Excel que usa?
      Seleccione uma folha vazia escreva nas células A1:D1 os valores 1, 3, 4 e 5., e com uma outra célula seleccionada, escreva na barra de fórmulas =A1:D1 e clique na tecla F9. Veja o que ficou escrito na barra {1\3\4\5} ou não. Se não, substitua na minha fórmula o vector linha {1\3\4\5} por aquele que foi encontrado.
      Se não resultar tente ver se a formula funciona para obter os valores da coluna preço unitário, substituindo o vector pelo valor 5 (só uma coluna seleccionada)

    2. Avatar de José Augusto
      José Augusto

      Veja a correspondência entre Excel PT e Excel BR
      SE.ERRO (PT-PT) SEERRO (PT-BR)
      É uma das causas do erro que está a encontrar.

  7. Avatar de elizandro
    elizandro

    Augusto.. melhorou.. está trazendo as datas corretas… e me parece na ordem financeira… porém traz somente datas… veja abaixo.

    19/10/2012 19/10/2012 19/10/2012
    08/10/2012 08/10/2012 08/10/2012
    13/10/2012 13/10/2012 13/10/2012
    #NOME? #NOME? #NOME?

  8. Avatar de elizandro
    elizandro

    verifiquei sua orientação em relação sobre o vector e está aparecendo conforme você mencionou: {1\3\4\5} .

    1. Avatar de José Augusto
      José Augusto

      Olá Elizandro
      Veja o ficheiro que partilho no Google Drive
      Excel_Matriz_pplware.xlsx

  9. Avatar de elizandro
    elizandro

    AUGUSTO… FICOU MUITO boa… você é muito fera no excel.
    Fiz alguns testes e verifiquei que quando há dados financeiros iguais de um mesmo vendedor a fórmula trás sempre o mesmo produto… como solucionar isso?? no caso a fórmula que vem classificada por valores descrescentes… eu preciso que ela seja decrescente, como você fez… porém… que a fórmula busque o produto correto…

    Alternativa com uma só fórmula, lista ordenada pelo preço
    Data Produto Quantidade Preço Unitário
    08/10/2012 Notebook 6 2.250,00 €
    08/10/2012 Notebook 6 2.250,00 €
    08/10/2012 Notebook 6 2.250,00 €

  10. Avatar de elizandro
    elizandro

    tem algum email que eu possa encaminhar para você uma planilha que eu preciso desenvolver, com esta fórmula?? falta pouco…rsrs

    1. Avatar de José Augusto
      José Augusto

      Use a fórmula que se segue: (ordem de preço e dentro do mesmo preço ordem da posição)

      =SE.ERRO(ÍNDICE($A$2:$E$12;CORRESP(MAIOR(0+($B$2:$B$12=$A$16)*($E$2:$E$12-LIN($E$2:$E$12)*0,00001);LIN(A1:A11));($E$2:$E$12-LIN($E$2:$E$12)*0,00001);0); {1\3\4\5});””)

      Quanto ao resto, o meu trabalho/tempo não me permite assumir nenhum outro “encargo”. 🙂

  11. Avatar de elizandro
    elizandro

    VEJA SE VOCE CONSEGUE acessar a planilha no link do google drive
    https://drive.google.com/open?id=0B0eAec9XozD3dkhrVlRCT1RkZDQ

    é bem simples… tem uma tabela… de vendas…. cidades e região…
    preciso dos 10 maiores cidades vendedoras por região… a tua fórmula criada atende quase perfeitamente… porém terei algumas vendas iguais por região e cidade… e a fórmula deve trazer a cidade correta … e não a primeira… como está acontecendo com a tua fórmula atual…

  12. Avatar de elizandro
    elizandro

    Augusto… entendo perfeitamente…
    colei a fórmula que você passou… mas ela retorna apenas as datas…
    Data Produto Quantidade Preço Unitário
    19/10/2012 19/10/2012 19/10/2012 19/10/2012
    08/10/2012 08/10/2012 08/10/2012 08/10/2012
    13/10/2012 13/10/2012 13/10/2012 13/10/2012

    1. Avatar de José Augusto
      José Augusto

      Ignore a resposta anterior
      Veja os ficheiros 1 e 2
      Ficheiro 1
      Ficheiro 2

      1. Avatar de elizandro
        elizandro

        oi augusto.. não veio o link….nos arquivos ficheiro 1 e 2.. refaça por favor

        1. Avatar de José Augusto
          José Augusto

          Julgo que agora estão correctos
          Ficheiro 1
          Ficheiro 2

  13. Avatar de elizandro
    elizandro

    Augusto.. bom dia!
    ainda não… tentei no celular e no micro.. não abriu… página não pode ser exibida.
    cole aqui mesmo a fórmula… grato.
    abraço.

    1. Avatar de José Augusto
      José Augusto

      Bom dia
      Seleccione as células B2:C2 do seu ficheiro [fórmula maior.xlsx] e escreva na barra de fórmulas
      =SE(CONTAR.SE($G$2:$G$58;$E$2)>=$A2;SE.ERRO(ÍNDICE($H$2:$I$58;CORRESP(MAIOR(0+($G$2:$G$58=$E$2)*($I$2:$I$58-LIN($I$2:$I$58)*0,00001);$A2);($I$2:$I$58-LIN($I$2:$I$58)*0,00001);0); {1\2});””);””)
      copie B2:C2 para baixo.
      Nota: No meu computador os links abrem sem problema

    2. Avatar de José Augusto
      José Augusto

      Não se esqueça de que é uma fórmula matricial.

  14. Avatar de elizandro
    elizandro

    olá.. como fazer uma fórmula que traga-me, na relação abaixo, SEM CRIAR COLUNAS ACESSÓRIAS, os maiores destinos, tendo como origem Florianópolis?
    ex.: o maior destino, tendo como origem florianópolis é: Chapecó – 4 vezes
    o segundo maior destino, tendo como origem Florianópolis é: São Francisco do sul – 3 vezes… e assim por diante.
    Esta fórmula tem que ter um argumento, no caso “florianópolis” e após contar os destinos e trazer os maiores…nomeando a quantidade e o nome da cidade.

    ORIGEM DESTINO
    Florianópolis São Francisco do Sul
    Urussanga Chapecó
    florianópolis Chapecó
    São Bento do Sul Chapecó
    Florianópolis Chapecó
    Florianópolis São Francisco do Sul
    Florianópolis São Francisco do Sul
    Barra Velha Maceió
    Florianópolis Camboriú
    Gravatal Barra do Garças
    Lages Barra do Garças
    Lages Maravilha
    Lages Maravilha
    Içara Maravilha
    Florianópolis Chapecó
    Florianópolis Chapecó