Macro para mover colunas com base nos critérios de cabeçalho MS Excel

1

Estou começando uma nova posição em 8 dias e sou muito novo em visual basic. Eu pude trabalhar com um empregado atual e em um dos relatórios, o indivíduo estava analisando cerca de 100 colunas, selecionando 8 ou mais para o relatório, copiando e colando em uma nova planilha.

O que eu gostaria de realizar é o seguinte:

Crie uma macro que examine a planilha 2, na qual eu teria os 8 cabeçalhos de coluna do relatório, examine a planilha 1 (planilha primária) e localize as 8 colunas e mova os dados (não os cabeçalhos) para a planilha 2 Isso ajudaria a acelerar o relatório, há outras coisas que eu gostaria que ele fosse capaz de fazer, mas isso serviria como um excelente ponto de partida.

I.E .: A Folha 2 teria: Nome do Contratante, Nome do Gerente, Descrição do Projeto, etc.

    
por user197240 11.02.2013 / 01:07

1 resposta

0

O mais básico possível.

1 |Sub copycolumns()
2 |Dim i As Integer, searchedcolumn As Integer, searchheader As Object
3 |
4 |For i = 1 To 8
5 |
6 |   set searchheader = Sheets(2).Cells(1, i)
7 |
8 |   searchedcolumn = 0
9 |   On Error Resume Next
10|   searchedcolumn = Sheets(1).Rows(1).Find(what:=searchheader.value, lookat:=xlWhole).Column
11|   On Error GoTo 0
12|
13|   If searchedcolumn <> 0 Then
14|      Sheets(1).Columns(searchedcolumn).Copy Destination:=searchheader
15|   End If
16|    
17|Next i
18|
19|End Sub
  • Linha 4: Usa um loop FOR que executa uma variável de 1 a 8.
    A variável i representa a coluna atual na planilha 2

  • Linha 6: Aqui, salvamos o cabeçalho atual (uma única célula) como um objeto. Este objeto será reutilizado na linha 10 e 14

  • Linha 8: você precisa redefinir a variável de pesquisa searchedcolumn antes de fazer uma nova pesquisa. Se você não fizer isso e a pesquisa falhará (não presente na planilha 1), a variável ainda mantém o valor antigo.

  • Linha 10: O método find é a parte principal de toda a macro. Ela pegou a string de sua coluna atual da planilha 2 e procura por ela na primeira linha da planilha 1. Se houver um hit de pesquisa positivo, o número da coluna correspondente será armazenado na variável searchedcolumn

  • Linha 9 e 11: Isso inicia e interrompe o manipulador de erros. Dessa forma, se ocorrer um erro na linha 10, você não receberá uma mensagem de erro interna do VBA. Em vez disso, o código continuará.

  • Linha 13: teste se o método find encontrou algo e o valor mudou de zero para um número de coluna válido.

  • Linha 14: Se sim, copie toda a coluna da folha 1 para a coluna correspondente na folha 2

Nota: O código pode ser encurtado ainda mais. Mas do que seria mais complicado explicar tudo.

É claro que você precisa excluir manualmente o número do índice no início de cada linha.

    
por 11.02.2013 / 02:04