none
[EXCEL] Como selecionar coluna com célula mesclada, via macro? RRS feed

  • Pergunta

  • Bom dia pessoal!!!

    Vou criar uma situação hipotética que exemplifica o meu problema. Digamos que a planilha que estou trabalhando possui três colunas, sendo que em uma linha as células das 3 colunas estão mescladas. Em um dado momento, eu preciso excluir a coluna do meio.

    A partir do próprio excel, eu consigo selecionar apenas a coluna do meio e excluí-la sem problemas, alcançando o resultado desejado. Entretanto, via macro, quando eu tenho executar o comando "Columns("B:B").Select", são selecionadas as 3 colunas. Como eu faço para selecionar apenas a coluna "B", via macro? Preciso fazer isso de forma automática, sem intervenção do usuário.

    Obs: alguém poderia me explicar o motivo dessa diferença entre as ações executadas a partir do excel e a partir do código VBA?

    Obs2: o código VBA foi, inclusive, gerado automaticamente pelo excel.


    Muito obrigado galera!!!
    quarta-feira, 23 de março de 2016 16:27

Respostas

  • Não é comum trabalhar com seleção dentro do VBA, trabalhar com seleção deixa o código lento. Seu objetivo é excluir a coluna? Se for isso tenta... 

    Range("B:B").Delete

    dessa forma ele exclui apenas a coluna B independente da mescla.

    Abs.

    daniel.beneton@hotmail.com

    quarta-feira, 23 de março de 2016 17:52
  • O código não é diferente, é o mesmo.

    O que acontece é que existe mais de uma forma de selecionar uma coluna no Excel. Uma delas, que deve ser como você fez, é clicando no rótulo de cabeçalho da coluna B. Outra forma é clicar sobre uma célula da coluna B e pressionar Ctrl+Espaço. No entanto, ao fazer isso, se houver algum intervalo mesclado horizontalmente, a seleção expande de forma a ocupar mais de uma coluna. O método Select do Excel entende uma seleção da mesma forma como no segundo caso, embora você tenha gravado como no primeiro.

    ---

    Em tempo: o gravador de macros é bom para aprender as instruções do Excel no VBA, mas é recomendável interpretar e ajustar o código.

    Por exemplo: o código gerado abaixo:

    Columns("B:B").Select
    Selection.Delete

    Pode ser reduzido a:

    Columns("B:B").Delete

    No geral, selecionar um intervalo para depois fazer uma ação não é uma boa prática no Excel. Evite usar os métodos Select e Activate dos objetos Range e Worksheet.



    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 23 de março de 2016 20:14
    Moderador

Todas as Respostas

  • Não é comum trabalhar com seleção dentro do VBA, trabalhar com seleção deixa o código lento. Seu objetivo é excluir a coluna? Se for isso tenta... 

    Range("B:B").Delete

    dessa forma ele exclui apenas a coluna B independente da mescla.

    Abs.

    daniel.beneton@hotmail.com

    quarta-feira, 23 de março de 2016 17:52
  • O código não é diferente, é o mesmo.

    O que acontece é que existe mais de uma forma de selecionar uma coluna no Excel. Uma delas, que deve ser como você fez, é clicando no rótulo de cabeçalho da coluna B. Outra forma é clicar sobre uma célula da coluna B e pressionar Ctrl+Espaço. No entanto, ao fazer isso, se houver algum intervalo mesclado horizontalmente, a seleção expande de forma a ocupar mais de uma coluna. O método Select do Excel entende uma seleção da mesma forma como no segundo caso, embora você tenha gravado como no primeiro.

    ---

    Em tempo: o gravador de macros é bom para aprender as instruções do Excel no VBA, mas é recomendável interpretar e ajustar o código.

    Por exemplo: o código gerado abaixo:

    Columns("B:B").Select
    Selection.Delete

    Pode ser reduzido a:

    Columns("B:B").Delete

    No geral, selecionar um intervalo para depois fazer uma ação não é uma boa prática no Excel. Evite usar os métodos Select e Activate dos objetos Range e Worksheet.



    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 23 de março de 2016 20:14
    Moderador