Arquivo da categoria: Excel

Dicas sobre Excel e utilização desta planilha eletrônica, que é a mais utilizada no mundo

Gerador de Cadastros de Excel com Access 2018

Enfim, ele chegou. Era tudo o que eu queria e provavelmente, nada do que você espera.

Calma que eu explico.

Se você já conhece este blog, existe uma grande chance te ter chegado aqui por causa deste carinha:

Modelos Prontos

O Modelo de Cadastro em Excel teve sua primeira versão lançada em 2008. Sim, 10 anos! A intenção sempre foi dizer ao mercado que era possível fazer certas coisas no Excel VBA que muitos programadores não VBA desacreditavam. Bem, parece que deu certo. Da quantidade de perguntas que recebo no email ao fórum dedicado e alguns clones com referências esquecidas, esse modelo ganhou versões, sendo algumas minhas e outras criadas pela comunidade e outras variações, desde versões do mesmo com banco de dados no access até uma primorosa feita pelo colega Mikel Silveira Braga que produz o mesmo feito sem o uso de ADO.

Se você fez uso dele para alguns de seus projetos, bem, aqui vai meu muito obrigado pelo reconhecimento.

E é em continuação a esse reconhecimente que este modelo precisava de uma atualização. É sabido que o VBA não recebe atualização faz anos. Porque então uma nova versão? Se a tecnologia não muda, o que precisa mudar é a forma de pensar. Foi pensando nisso que decidi não otimizar, mas sim reconstruir o modelo do zero.

O Gerador de Cadastros 2018

Verdade das verdades, esse era para ser o Gerador de Cadastros 2017, mas enrolei tanto que acabou saindo só esse agora. Ele inclusive passou por uma revisão do já mencionado Mikel, que aprovou após algumas ressalvas. Valeu Mikel!

Quando decidi reconstruir o modelo, procurei manter em mente o que os usuários mais solicitavam dele. Por incrível que pareça, o pedido mais comum era também o mais básico. Personalizar o nome dos campos. Com isso em mente, mais algumas ideias malucas que surgiu o gerador de cadastros!

Ele não é uma ideia original. O código foi baseado no modelo que o gerador de formulários do Code VBA Builder. Quando vi a funcionalidade e seu potencial, decidir usa-lo como base para tal. Calma, você não precisa do Code VBA instalado para isso.

O uso é relativamente simples. Porém, e mais fácil demonstrar isso em vídeo.

Ainda vou escrever toda a implementação em detalhes num documento extenso que publicarei em breve, mas não quero mais atrasar a publicação deste modelo.

Todo o código, como baixar e usar está explicado no mesmo.

Gerador de Cadastros no GitHub: https://github.com/Tomamais/VbaFormBuilder

Bem, curta o vídeo e bom proveito!

Embelezando sua fórmula no Excel

A internet é um lugar lindo, principalmente para quem busca coisas lindas.

Viagens a parte, o que significa embelezar sua fórmula no Excel? Não, ela não ficará mais bonita. Ela nem vai mudar, mas, vai ficar muito mais fácil de você entendê-la. Vamos pegar esse post recente deste honorável blog como cobaia. A fórmula do artigo é esta:

=SE(A2="";"";CONCAT(EXT.TEXTO(A2;1 + NÚM.CARACT(A2)-LIN(INDIRETO("1:" & NÚM.CARACT(A2)));1)))

É até simples, mas, e se ela fosse apresentada de outra forma?

=SE(
    A2 = "";
    "";
    CONCAT(
        EXT.TEXTO(
            A2;
            1 +
            NÚM.CARACT(
                A2
            ) -
            LIN(
                INDIRETO(
                    "1:" &
                    NÚM.CARACT(
                        A2
                    )
                )
            );
            1
        )
    )
)

Não sei você, mas se você estiver procurando algum erro, ou querendo isolar um pedaço da fórmula, ou mesmo tentando entendê-la melhor, é muito mais simples se ela estiver formatada como acima. Quem faz esse mágica é o site Excel Formula Beautifier. Ele está disponível somente em inglês, mas deixa que você configure o separador de fórmulas para ser o “;” ou invés do “,” do Excel em inglês.

Veja como fica a fórmula deste artigo “embelezada”:

Tive que reduzir o zoom da página para caber
Tive que reduzir o zoom da página para caber

Muito além do Excel

Só de fazer o que faz e ser de graça, já vale a menção. Não bastasse tudo isso, ele converte fórmulas do Excel para expressões linguagens como o C#, Javascript ou Python. Veja o exemplo padrão do site convertido em C#:

Não é feitiçaria, é tecnologia!
Não é feitiçaria, é tecnologia!

Mais ainda, o código da página é aberta e está disponível no github!

Quer mais? A página do autor sobre o assunto lista uma série de projetos na mesma linha de avaliar fórmulas de modo a quebrá-la em partes para um melhor entendimento. Um que me chamou a atenção foi fórmula parser, escrito em C#, também disponível para download.  Veja como ele destrincha uma fórmula do Excel em partes:

Excel Formula Parsing, in C#
Excel Formula Parsing, in C#

Para terminar, lembro que neste vídeo que postei no canal lendo comentários, muitos me perguntaram como colaborar com a comunidade. Esse é um jeito.

Invente o seu!

Excel – Gerando GUIDs sem VBA

Sim, é possível!

Para você que nunca ouviu falar, um GUID (se já sabe ou não quer saber, vá para o final do artigo) ou Identificador Universal Único (do inglês Global Unique IDentifier) é uma valor de 128 bits representado por uma cadeia de texto de caracteres alfa numéricos. Mas pra que isso?

Há varias razões para você querer um identificador desse tipo. Lhe darei estas:

  • Um identificador único dentro de um contexto ou universo que seja difícil de repetir
  • Um identificador que seja difícil de memorizar
  • Um identificador que em nada se relacione com o que ele está identificando

Poderia citar outras. O fato é que uma hora ou outra, ele se tornará interessante para você algum dia. Então, porque não gerá-lo no Excel? Sim, é possível. A fórmula não é simples, mas você não precisa dominá-la, só saber que existe e fazer proveito:

=CONCATENAR(DECAHEX(ALEATÓRIOENTRE(0;4294967295);8);"-";DECAHEX(ALEATÓRIOENTRE(0;42949);4);"-";DECAHEX(ALEATÓRIOENTRE(0;42949);4);"-";DECAHEX(ALEATÓRIOENTRE(0;42949);4);"-";DECAHEX(ALEATÓRIOENTRE(0;4294967295);8);DECAHEX(ALEATÓRIOENTRE(0;42949);4))

É bem isso mesmo, mas funciona! É claro que não tirei isso do nada. Este post no stackoverflow dá a dica. E mais, coloca a fórmula em vários outros idiomas!

Em inglês:

=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,42949),4),"-",DEC2HEX(RANDBETWEEN(0,42949),4),"-",DEC2HEX(RANDBETWEEN(0,42949),4),"-",DEC2HEX(RANDBETWEEN(0,4294967295),8),DEC2HEX(RANDBETWEEN(0,42949),4))

Em espanhol:

=CONCATENAR(
DEC.A.HEX(ALEATORIO.ENTRE(0,4294967295),8),"-",
DEC.A.HEX(ALEATORIO.ENTRE(0,65535),4),"-",
DEC.A.HEX(ALEATORIO.ENTRE(16384,20479),4),"-",
DEC.A.HEX(ALEATORIO.ENTRE(32768,49151),4),"-",
DEC.A.HEX(ALEATORIO.ENTRE(0,65535),4),
DEC.A.HEX(ALEATORIO.ENTRE(0,4294967295),8)
)

Em francês:

=CONCATENER(
DECHEX(ALEA.ENTRE.BORNES(0;4294967295);8);"-";
DECHEX(ALEA.ENTRE.BORNES(0;42949);4);"-";
DECHEX(ALEA.ENTRE.BORNES(0;42949);4);"-";
DECHEX(ALEA.ENTRE.BORNES(0;42949);4);"-";
DECHEX(ALEA.ENTRE.BORNES(0;4294967295);8);
DECHEX(ALEA.ENTRE.BORNES(0;42949);4))

Em alemão (feio demais, eu sei):

=KLEIN(VERKETTEN(DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;8));8);"-";DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;4));4);"-";"4";DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;3));3);"-";DEZINHEX(ZUFALLSBEREICH(8;11));DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;3));3);"-";DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;8));8);DEZINHEX(ZUFALLSBEREICH(0;POTENZ(16;4));

Em holandês:

=KLEINE.LETTERS(TEKST.SAMENVOEGEN(DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;8));8);"-";DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;4));4);"-";"4";DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;3));3);"-";DEC.N.HEX(ASELECTTUSSEN(8;11));DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;3));3);"-";DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;8));8);DEC.N.HEX(ASELECTTUSSEN(0;MACHT(16;4));4)))

Ufa! Se precisar da fórmula em mais algum idioma, bem… se vira aí!

😉

Excel – Invertendo texto usando fórmulas matriciais (sem VBA)

A dica foi dada originalmente pelo Johann Hackl no site TechNet, em inglês.

Antes de mais nada, a dica só funciona no Excel 2016. Passei um tempo frustrado e quase xingando o Excel 2013 quando percebi que para o truque funcionar, era preciso suporte à função CONCAT (é CONCAT mesmo, não CONCATENAR).

O mais bacana do post original é que ele não só dá e presente a função, mas explica como ela funciona passo a passo. Vou tentar fazer o mesmo por aqui.

A Fórmula

=SE(A2="";"";CONCAT(EXT.TEXTO(A2;1 + NÚM.CARACT(A2)-LIN(INDIRETO("1:" & NÚM.CARACT(A2)));1)))

Obviamente, o texto a ser invertido tem que estar na célula A2 (dã!).Também, como é uma fórmula matricial, você precisa pressionar Ctrl+Shift+Enter ao invés só só Enter.

Só isso fará o texto ser invertido.

A verdadeira mágica reside em duas frentes.  A primeiro é o uso de fórmulas matriciais. O segundo é o fato da função CONCAT aceitar ranges como argumento, algo que a função CONCATERNAR não faz. Junte isso tudo e você terá a funcionalidade, sem VBA!

Mais detalhes no post original (linkado acima)

Bom proveito!