Como utilizar imagens nos marcadores de gráfico no Excel

No gráfico do Excel, selecionar o marcador que você quer colocar a imagem. Ir em opções de marcador, e tem uma opção lá que é imagem. Depois de selecionada, vai pedir para carregar uma imagem ou do computador, ou do banco de imagens da Microsoft.

Alguns exemplos:

Cuidados com Excel como banco de dados

O Excel não foi feito para ser um banco de dados completo. Seguem alguns cuidados.


Notação decimal

Se escrevermos =1E3 numa célula do Excel, ele vai entender que é notação decimal (10 elevado à 3), e vai transformar o conteúdo em 1000 (teste em qualquer planilha).

Porém, e se o conteúdo que quisermos armazenar for realmente a string “1E3”? Teremos que mudar o formato da célula, de geral para texto, o que é possível, porém, requer atenção.

O mesmo é válido para qualquer número nesse formato.

Datas

Se escrevermos 1/mar numa célula qualquer, o Excel vai entender que é uma data, 01/março.

E se quisermos armazenar a string “1/mar”, por algum motivo? O Excel vai entender errado, novamente.

Números grandes

Da mesma forma, um número grande vai ser descrito em notação científica – vamos perder precisão, se o objetivo for armazenar exatamente todos os dígitos.

Muitos dos erros são devido ao tipo de conteúdo – número (int, float), datas, strings,  etc.

Num banco de dados como o Access, temos que declarar o tipo da coluna em separado ao conteúdo, o que ajuda (mas não resolve totalmente) nesse tipo de problema.

Limite de linhas e colunas

Outro erro comum. O Excel antigo (até 2003) tinha 65 mil linhas – o que era suficiente na época, mas muito pouco hoje.

O Excel atual tem máximo 1 milhão de linhas e 16 mil colunas – e isso não é suficiente para um banco grande.

Um erro possível é truncar linhas de um banco de dados, e trabalharmos com menos informação que existe de verdade.

Caso: banco de genomas

Pode parecer improvável, mas é possível errar muito sem essas noções.

Estudo: 20% dos papers de genômica tinham algum erro de Excel.

Bases de genoma têm siglas esquisitas, como SEPT2 – que facilmente pode virar 2 de Setembro!

Report Finds Microsoft Excel Causes Errors in 20 Percent of Genomics Studies | Mental Floss

Erros de arredondamento

Quanto é 0,5 – 0,4 – 0,1?

Claramente, é igual a zero.

Coloque =0,5 – 0,4 – 0,1 no Excel, e vai dar zero.

Porém, uma pequena modificação (multiplicar por 1) e vai dar -2.77E-17

=(0,5 – 0,4 – 0,1)*1

Ou seja, -2,77 elevado a -17. Um número pequeno, mas não zero.

Isso ocorre devido à erro de arredondamento, na representação do número em binário.

Aliás, esse não é um privilégio do Excel. Em Python e outras linguagens também acontece.

Ou seja, cuidado ao utilizar o Excel como banco de dados.

(Inspirado em trechos do livro Humble Pi, sobre erros matemáticos em geral)

Link da Amazon: https://amzn.to/3O27yjx


Visualização da semana

Veja também:

https://ideiasesquecidas.com/

Tenha o seu próprio dinossauro em 3D no Excel!

Inserir -> Modelos 3D -> Modelos 3D em estoque.

É possível escolher modelos diversos, e importar. Por exemplo, um dinossauro.

Com o modelo na planilha, é possível girar, redimensionar, etc.

Enquanto um dinossauro 3D não tem muita utilidade, talvez um modelo 3D de um caminhão, ou vagão de trem, ou de uma peça, sejam mais próximos da nossa realidade. A mensagem é que possível incorporar modelos assim em planilhas.

Experimente mexer no modelo 3D. Vide aqui:

https://1drv.ms/x/s!Aumr1P3FaK7joE_L67obLFwvSEUO?e=0dk8KA

Veja também:

https://ideiasesquecidas.com/

Gráfico dinâmico usando Excel

É possível criar gráficos dinâmicos usando o Excel, porém isso não é nativo. É necessário usar um pouco de VBA.

A lógica é usar o comando sleep e atualizar o gráfico, dentro de um loop for. Vide arquivo anexo.

Também é possível usar linguagens como o Python, mas isso envolve programação.

Outras alternativas: há sites online que criam gifs animados, dadas as imagens.

Download no Google Drive

MotionChart.xlsm

Juros simples x juros compostos

Juros simples x juros compostos

Os juros compostos dão retorno exponencial. Um pequeno experimento, para mostrar a força dos juros compostos.

Suponha um investimento inicial e uma taxa. Na primeira coluna, calculamos juros simples, e na segunda, compostos. No início, é praticamente igual.

Com um pouco mais de tempo, a diferença começa a surgir.

A longo prazo, os juros simples têm comportamento linear, enquanto os compostos, exponencial, daí o seu poder.

Lições: para ter efeito de juros compostos, é necessário investimento constante e paciência, visão de longo prazo. É como a tartaruga do conto de Esopo, devagar e sempre.

“Jogue jogos iterados. Todos os retornos na vida, seja em riqueza, relacionamentos ou conhecimento, vêm de juros compostos” – Naval Ravikant

Veja também:

https://ideiasesquecidas.com/

Arte com Retângulos em Excel

Descubra como fazer figuras agradáveis com retângulos dispostos aleatoriamente e algumas linhas de código, em Excel – VBA.

Para traçar um único retângulo no VBA, utilizar o comando a seguir:

ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 30, 50, 30).Select
Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 200)
Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)

Este vai traçar um retângulo nas coordenadas (x,y) = (50,30), com largura 50 e altura 30. Cor azul escuro e contorno preto.

Mais uma linha, para dizer a transparência de 70% – isso para destacar a intersecção com cores diferentes.

Selection.ShapeRange.Fill.Transparency = 0.7

Se colocarmos tudo dentro de um loop for, sem aleatoriedade alguma, teremos um grid de retângulos.

For i = 1 To 12
 For j = 1 To 12
  ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50 * j, 30 * i, 50, 30).Select
  Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 200)
  Selection.ShapeRange.Fill.Transparency = 0.7
  Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
 Next j
Next i

Já o resultado fica um pouco mais interessante se acrescentarmos alguma aleatoriedade na disposição e tamanho dos retângulos.

Isso pode ser feito utilizando a função Math.Rnd, que dá um número aleatório entre 0 e 1. No caso, a função mexerá um pouquinho na posição (x,y) e um pouquinho no tamanho (width, height).

For i = 1 To 12
 For j = 1 To 12
  ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50 * j + 4 * Math.Rnd - 2, 30 * i + 4 * Math.Rnd - 2, 50 + 10 * Math.Rnd, 30 + 10 * Math.Rnd).Select
  Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 200)
  Selection.ShapeRange.Fill.Transparency = 0.7
  Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
 Next j
Next i

Algo curioso é que uma disposição totalmente aleatória ou totalmente ordeira fica menos bonita do que uma figura parcialmente ordenada, porém, com um grau de incerteza.

Podemos acrescentar uns blocos de cor amarela, sobrepostos aleatoriamente.

Finalmente, acrestamos mais alguns blocos azuis.

Não chega a ser um quadro de Mondrian, mas dá para brincar um pouco.

O mesmo pode ser feito com outras cores e outras doses de caos / ordem.

Para baixar a planilha, link: ArteRetangulos.xlsm

Confira a versão D3 – Javascript on-line em:

https://asgunzi.github.io/Arte-Retangulos—D3-JS/ArteRetangulos.html

Veja também:

https://ideiasesquecidas.com/

Utilização do OpenSolver com VBA

Introdução

O OpenSolver é um suplemento poderoso do Excel, para problemas de otimização combinatória.

Foi desenvolvido por Andrew Mason e equipe, da Universidade de Auckland (Nova Zelândia) e pode ser encontrado em: https://opensolver.org.

A ideia básica é que o Solver comum, do Excel, tem um limite de utilização (apenas 200 variáveis). Para problemas maiores do que isso, é necessário adquirir uma licença junto à Frontline, empresa desenvolvedora do Solver.

Já o OpenSolver pode utilizar solver open-source, como o CBC. Ou utilizar ferramentas (pagas) ainda mais poderosas, como o Gurobi ou o CPLEX. Dessa forma, abrimos uma gama de aplicações muito maior do que apenas o Solver da Frontline.

O OpenSolver tem um menu de utilização bastante similar ao Solver comum.

Este tutorial mostra como utilizar VBA para acessar e manipular o OpenSolver.

Qual a vantagem de utilizar o VBA? É ter uma flexibilidade maior na formulação, e com isso poder transformar a planilha numa ferramenta – para o usuário leigo, é só clicar num botão e resolver.

O Problema da Mochila

O Problema da Mochila é um clássico da otimização combinatória. Vamos utilizar como exemplo.

Vou fazer uma viagem, e tenho uma mochila. Há diversos itens que posso escolher para levar. Cada item tem um peso e um valor.

Quais itens devo levar?

Quero maximizar o valor que estou levando na mochila, restrito ao peso máximo que consigo carregar.

No Excel, o peso máximo da mochila e os valores e pesos por item devem ser dados de entrada do problema.

O campo “Solução” deve conter 0 ou 1 (indicando não levar ou levar o item). O Peso Total é a soma do peso dos itens escolhidos, e a Função Objetivo é a soma dos valores dos itens escolhidos.

Baixe o arquivo Excel em Knapsack_OpenSolver.xlsm

Primeiro passo: adicionar o OpenSolver nas referências do VBA

Como adicionar o OpenSolver nas referências do VBA?

Ir em Ferramentas -> Referências

Adicionar o OpenSolver e clicar em OK.

Como modelar um problema no OpenSolver com VBA

Vamos utilizar o OpenSolver via VBA, para resolver o problema da mochila.

É importante notar que todo comando que fazemos manualmente tem o equivalente via VBA.

A referência para os comandos pode ser consultada em https://opensolver.org/opensolver-api-reference. Outra forma é consultando direto o código VBA do OpenSolver, ele detalha bem a forma de utilização.

Função Objetivo

No painel do OpenSolver, tem um campo para definir a célula com a função objetivo, e a direção: maximizar, minimizar, ou valor alvo.

O equivalente no VBA é a função SetObjectiveFunctionCell:

SetObjectiveFunctionCell Range(“i5”)

Para minimizar ou maximizar, SetObjectiveSense:

SetObjectiveSense MaximiseObjective

O próprio código, via autocompletar, vai dar as dicas das opções de preenchimento.

Definição de Variáveis

A seguir, podemos definir as variáveis, utilizando o painel do OpenSolver.

O equivalente, via código, é:

SetDecisionVariables Range(“i8:i470”)

E é nesse ponto que o código começa a ficar poderoso. Ao invés do range ser fixo e ser mudado a cada novo cenário, como no exemplo, podemos estabelecer o range de acordo com o tamanho do problema modelado via código.

Definição de Restrições

Para o caso em questão, o primeiro ponto a notar é que as variáveis de decisão devem ser binárias.

E a segunda restrição é a de que o valor carregado deve ser menor do que a capacidade máxima da mochila.

O equivalente VBA é bastante similar, com a utilização do comando AddConstraint:

AddConstraint Range(“i8:i470”), RelationBIN 

AddConstraint Range(“i4”), RelationLE, Range(“c5”)

A notar o parâmetro “RelationLE”, que significa “menor igual”. Há parâmetros para “maior igual”, “igual”, etc, basta consultar as opções no próprio código ou no link de referência dado acima.

Rodar o modelo

Com o modelo formulado, o próximo passo é rodar. Manualmente, isso equivale a clicar no ícone correspondente.

Em código, é utilizar o comando RunOpenSolver:

Dim result As OpenSolverresult

result = RunOpenSolver

O valor retornado será 0, no caso de rodar corretamente, e códigos outros conforme instruções abaixo.

Enum OpenSolverResult
Pending = -4 ‘ Used for solvers that asynchronously and are yet to run
AbortedThruUserAction = -3 ‘ Used to indicate that a non-linearity check was made (losing the solution)
ErrorOccurred = -2 ‘ Indicate an error occured and has been reported to the user
Unsolved = -1 ‘ Indicates a model not yet solved
Optimal = 0
Unbounded = 4 ‘ objective can be made infinitely good
Infeasible = 5 ‘ There is no solution that satisifies all the constraints
LimitedSubOptimal = 10 ‘ CBC stopped before finding an optimal/feasible/integer solution because of CBC errors or time/iteration limits
NotLinear = 7 ‘ Report non-linearity so that it can be picked up in silent mode
End Enum

Uma última dica é resetar o modelo antes do início da macro:

ResetModel

Senão for feito isso, as restrições antigas vão continuar existindo sobrepondo com as novas, o que pode fazer o modelo ficar incorreto.

Conclusão

O OpenSolver é uma ferramenta poderosa. Aliada ao VBA, pode permitir um grau de automação enorme, e resolver uma gama de problemas de Pesquisa Operacional nas empresas e na vida real.

Há diversas outras opções mais avançadas, a fim de permitir modelos complexos. A ideia do tutorial foi fazer o exemplo mais simples e didático possível.

O OpenSolver, em geral, é recomendado para problemas de tamanho médio. Para problemas muito grandes, começa a ter lentidão demasiada na leitura de dados e formulação do problema, pela forma com que este foi construído (fortemente baseada em Excel).

Exemplo prático: um trabalho de otimização de silvicultura, com cerca de 100 mil variáveis, demorava 6 horas para resolver com OpenSolver puro. Migrando para Python (Pyomo) + CBC, o tempo caiu para 40 min, para resposta de mesma qualidade. Com Python  (Pyomo) + Gurobi, o tempo caiu para 4 minutos, para a mesma resposta.

De qualquer forma, cabe ao projetista escolher a melhor ferramenta para o processo em questão, dadas as restrições (custo, tempo de processamento, maturidade do processo). E o OpenSolver figura como um excelente candidato a resolver problemas difíceis, de forma rápida e flexível.

Referências:

https://en.wikipedia.org/wiki/Knapsack_problem

O número 1729

O número 1729 é o primeiro inteiro que é a soma de dois números inteiros elevados ao cubo de duas formas diferentes. Quais são esses dois pares de números?

Respostas:

Números 1 e 12

E números 9 e 10

Ou seja,

1729 = 1^3 + 12^3 = 9^3 + 10^3

O jeito mais simples é fazer a conta (1729 – num^3)^(1/3), e ver se o resultado é inteiro, para todos os números de 1 a 1729. Vide Excel anexo.

Esse número tem uma história famosa.

O matemático britânico G.  Hardy visitou o matemático indiano Srinivasa Ramanujan no hospital. Ele relatou a conversa deles:

Eu tinha viajado no táxi número 1729 e observei que o número me parecia um tanto enfadonho e que esperava que não fosse um presságio desfavorável. “Não”, respondeu Ramanujan, “é um número muito interessante. É o menor número que pode ser expresso como a soma de dois cubos de duas maneiras diferentes.”

Veja também:

https://ideiasesquecidas.com/

O método da Roleta Viciada

Como sortear aleatoriamente um número? Essa é simples. Muitas linguagens têm um método tipo Random que gera um número entre 0 e 1. Isso vai gerar um número qualquer nessa faixa, todos com a mesma probabilidade.

Mas como fazer, quando alguns números têm probabilidade diferente?

Exemplo. Vou sortear uma rifa, e o peso de cada participante é proporcional à contribuição dele.

Nesse caso, o método é chamado de “Roleta viciada”.

Primeiro, calculamos a probabilidade Acumulada da série.

A seguir, usamos o mesmo método random comum, para gerar um número entre 0 e 1. Depois, vemos em que faixa esse número sorteado está, na probabilidade acumulada.

No caso, se for de 0 a 38% é o Manoel, de 38% a 53% Pedro, e acima de 53% Larissa.

Interpretação: É como plotar a probabilidade acumulada, escolher um número aleatório no eixo Y, e verificar a ordenada correspondente no eixo X.

É o mesmo truque utilizado para gerar distribuições como Normal, Triangular, Weibull, a partir da distribuição uniforme.

Vide arquivo no link.

RoletaViciada.xlsx

Veja também:

https://ideiasesquecidas.com