Bacteria wars

Segue um exemplo de aplicação do VBA. Mais ou menos inspirado no ‘evolved virtual creatures’ de Karl Sims (https://www.youtube.com/watch?v=JBgG_VSP7f8).

Você controla uma colônia de bactérias, contra uma colônia rival (computador).

Há três parâmetros: natalidade (quanto maior, mais se reproduz), longevidade (qto maior, maior a chance de não morrer por causas naturais) e ataque (qdo duas bactérias rivais ocupam o mesmo espaço, quem tem mais ataque tem mais chance de vencer). A restrição é distribuir 100% dos pontos nestes três critérios.

Vide arquivo aqui.https://1drv.ms/x/s!Aumr1P3FaK7jjjodaADPGp_Jljv_

Quem quiser sugerir melhorias e modificações, estou à disposição.

Att

Anúncios

VBA e Google Translate


Segue uma implementação de VBA que lê o texto na coluna A, e traduz para o inglês na coluna B.

Ele usa o Google Translate. Basicamente, abre um browser, consulta o Google Translate e retorna valor.

Como é a versão free, tem um limite de consultas, mas para uma lista pequena funciona bem.

Também podem ter erros de automação, porque é como se a macro abrisse um browser de verdade.


Link para download.

Inspirado em https://analystcave.com/excel-google-translate-functionality/


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/


Macro para atualizar a base de dados da tabela dinâmica

Como atualizar a fonte de dados de uma tabela dinâmica, para que ela leia certinho o número de linhas da fonte?

Uma forma simples de contornar o problema é colocar um range grande para a entrada da tabela dinâmica, digamos 500 mil linhas, e não ter que se preocupar com isto.  A desvantagem é que isto obriga o Excel a ler tais linhas, mesmo que vazias, aumentando o peso do arquivo.

Outra forma proposta é via macro, download aqui um exemplo.

Primeiro, lê quantas linhas têm na coluna A da Planilha 1 e joga na variável “nl”

Sheets(“Plan1”).Activate

‘Lê quantas linhas tem na coluna a, limitado a 100000 linhas

nl = Application.WorksheetFunction.CountA(Range(“a1:a100000”))

Depois atualiza a fonte de dados.

Há uma série de parâmetros aqui, o nome da tabela dinâmica, o range de dados. Uma forma fácil de obter esses parâmetros é gravando uma macro que atualiza a tabela, e depois apenas modificar o campo “SourceData”.

‘Preencher com o nome da tabela dinamica

‘É necessário também mudar a fonte de dados

‘No caso, “Plan1!R1C1:R” & nl & “C3”, está lendo da linha 1 coluna 1 (R1C1) até a linha nl coluna 3

ActiveSheet.PivotTables(“Tabela dinâmica1″).ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=”Plan1!R1C1:R” & nl & “C3”,   Version:=xlPivotTableVersion15)


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Quantas bobinas cabem num contêiner?


No comércio exterior, o termo “estufar” o contêiner significa colocar a carga dentro do contêiner.

Bobinas de pé, num contêiner, podem ser modeladas puramente por geometria.

O algoritmo (download aqui) pede as dimensões do contêiner, as características das bobinas, e sugere o arranjo ideal, restrito ao espaço disponível e à carga máxima permitida.

Outro exemplo:

Há softwares comerciais que fazem isto (ex. Max Load), fazendo também a composição de diferentes tipos de bobinas, e também é possível colocar bobinas deitadas, etc. Entretanto, são softwares bem mais complicados para usar. Para a aplicação simples como o caso acima, o algoritmo do anexo funciona.

Cuidado: só vale para bobinas em pé.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/


Macro para consolidar tabelas

Segue em anexo uma macro que lê dados das tabelas 1 e 2, coloca uma debaixo da outra, e cola na aba de resultados. Link para download.

Esta utiliza um “toolbox” que fiz ao longo dos anos.

Tem uma função para copiar dados e jogar numa variável

copiaDados 2, 1, 10, tab1, “Tab1”

copiaDados 2, 1, 10, tab2, “Tab2”

Outra função para colocar uma tabela embaixo da outra

appendlins tab1, tab2, consolidado

e outra função para colar.


Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Criptografia XOR

Segue neste link uma implementação de um método muito simples de criptografia, a XOR.

image002.png

É necessário ter uma chave, digamos o número 10. Este método é simétrico, o que significa que tanto a pessoa que encripta quanto a que decripta deve conhecer a mesma chave.

Clicando em encriptar, gera-se o resultado com as letras esquisitas.

Ao decriptar, volta-se à mensagem original.




Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com

Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/




Como obter o nome do usuário pelo vba

Segue aqui um exemplo de como obter o usuário de rede, e nome do computador pelo vba. É um truque bem simples, e serve para gravar a pessoa que fez alguma ação. Username.png Dim GetUserN Dim ObjNetwork Set ObjNetwork = CreateObject(“WScript.Network”) Dim UsuarioRede As String Dim computer As String Dim domain As String UsuarioRede = ObjNetwork.UserName computer = ObjNetwork.computername domain = ObjNetwork.userdomain MsgBox “Usuário: ” & UsuarioRede & Strings.Chr(10) & “Computador: ” & computer & Strings.Chr(10) & “Domínio: ” & domain
Ideias técnicas com uma pitada de filosofia: https://ideiasesquecidas.com Ferramentas Excel-VBA: https://ferramentasexcelvba.wordpress.com/