É inevitável na rotina de um DBA ter que utilizar-se de ferramentas que auxiliem seu trabalho.
Ontem recebi uma planilha no seguinte formato:
| SETOR | SubSetor | Regra | Subregra | Código | Descrição |
| 1 | 01.1 | Bla bla bla | |||
| 01.11 | Bla bla la | ||||
| 01.11-3 | Bla bla bla | ||||
| 0111-3/01 | Bla bla bla | ||||
| 0111-3/02 | Bla bla bla | ||||
| 0111-3/03 | Bla bla bla | ||||
| 0111-3/99 | Bla bla bla |
Eu deveria importar esta planilha numa tabela de nosso banco. Dentro da tabela ela ficaria mais ou menos assim:
| SETOR | SubSetor | Regra | Subregra | Código | Descrição |
| 1 | 01.1 | NULL | NULL | NULL | Bla bla bla |
| 1 | 01.1 | 01.11 | NULL | NULL | Bla bla bla |
| 1 | 01.1 | 01.11 | 01.11-3 | NULL | Bla bla bla |
| 1 | 01.1 | 01.11 | 01.11-3 | 0111-3/01 | Bla bla bla |
| 1 | 01.1 | 01.11 | 01.11-3 | 0111-3/02 | Bla bla bla |
| 1 | 01.1 | 01.11 | 01.11-3 | 0111-3/03 | Bla bla bla |
| 1 | 01.1 | 01.11 | 01.11-3 | 0111-3/99 | Bla bla bla |
Ok… existe uma hierarquia que visualmente fica melhor representada na primeira tabela, no entanto, dentro do banco os dados deveriam estar como exposto na segunda tabela, isso iria influenciar na chave primária e etc.
Enfim, vamos lá!
Mas faltou um detalhe… a tabela tinha algumas milhares de linhas. Como eu faria isso? CTRL C, CTRL V?? Quantas horas de um trabalho monótono copiando e colando, copiando e colando…
Bha!
Nessas horas eu adoro o Excel e suas macros. Para muitos pode parecer ridiculo mas me ajuda e talvez possa ajudar outras pessoas em situação parecida.
Ok… fiz um pequeno script que varria todas as linhas de uma determinada coluna da planilha, verificando se existiam células vazias. Se a célula está vazia, esta deve receber o conteúdo da célula anterior e assim por diante até o fim.
Muito simples e o trabalho todo, incluindo a importação no banco, não durou 1 hora. Então segue aí o script em VB, escrito dentro do próprio Excel:
Sub Copia_Celula_Anterior()
‘
‘ Copia_Celula_Anterior() Macro
‘ Macro gravada em 1/7/2008 por silas.mendes
‘
‘Declara váriavel de apoio do contador
Dim i As Integer
‘Inicializa váriavel com a primeira linha preenchida da planilha
‘ATENÇÃO: Esta informação sera copiada para outra(s) célula(s), caso
‘esteja(m) vazia(s).
i = 8
‘Varre todas a linhas da coluna até a linha 2371
Do While i < 2371
‘Verifica se a célula atual está vazia
If Range(“E” & i).Value = “” Then
‘Se a célula está vazia, seleciona a última célula
Range(“E” & i – 1).Select
‘Copia os dados da célula selecionada
Selection.Copy
‘Volta a selecionar a célula vazia (atual no loop)
Range(“E” & i).Select
‘Cola o conteúdo na célula vazia
ActiveSheet.Paste
End If
‘Incrementa contador do Loop
i = i + 1
Loop
End Sub
É, isso também faz parte da rotina de um DBA :))