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áveli
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ávelsearchedcolumn
-
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.