Olá, sou novato no forum, e ja chego pedindo uma baita ajuda
possuo um sistema de análise de dados (Análise da atividade elétrica do coração), tais dados são provenientes de uma leitura feita por um eletrocardiograma que salva os dados (em Milisegundos) em um arquivo CSV, com uma unica coluna, e cada dado em uma linha diferente, utilizei uma planilha do Excel para realizar a limpeza destes dados, pois em muitos casos podem ocorrer o que chamamos de "interpolação" que são dados idênticos em sequência, quando isto ocorre as linhas que contem estes dados precisam ser excluídas. Exemplo:
[A]
[1] 0.800
[2] 0.833 (interpolado)
[3] 0.833 (interpolado)
[4] 0.870
neste caso as linhas [2] e [3] precisam ser excluídas, restando:
[A]
[1] 0.800
[2] 0.870
Para fazer isto, usei uma baita gambiarra no VBA mas que está funcionando muito bem:
Na Coluna "b" é inserida uma função "SE" que verifica se o valor da célula é igual ao da célula acima dela ou abaixo, se for, retorna como "interpolado" se não for, deixa a célula vazia (" ")
no vba criei uma sub que exclui a linha inteira se na coluna "b" constar o valor "interpolado", e no final desta Sub a coluna "b" é excluída.
Este processo esta funcionando para mim, mas sei que isso é gambiarra, se houver outro meio de faze-lo mais facilmente, estou aceitando sugestões.
Agora vamos ao problema de fato
Trabalho com centenas destes arquivos, e o sistema apenas reconhece arquivos CSV, porem ao invés de utilizar Virgulas como separador, ele utiliza ponto e virgula, já li e reli mil vezes que o VBA utiliza os padrões regionais e de idiomas para formatar o CSV, e por isso vai utilizar VIRGULA, Vamos ao Código;
Sub ExportCVS()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
template_file = ActiveWorkbook.FullName
fileSaveName = Range("G1").Value
Columns("A:H").Delete
If fileSaveName = False Then
Exit Sub
End If
'cria uma cópia da pasta de trabalho atual da planilha atual
Dim newBook As Workbook
Dim plan As Worksheet
Set newBook = Workbooks.Add
ThisWorkbook.ActiveSheet.Copy Before:=newBook.Sheets(1)
'exclui as demais planilhas
For Each plan In newBook.Sheets
If plan.Name <> ActiveSheet.Name Then
newBook.Worksheets(plan.Index).Delete
End If
Next
newBook.SaveAs Filename:= _
fileSaveName, FileFormat:=xlCSV, _
CreateBackup:=False, TextCodepage:=True, local:=True
'fecha a pasta de trabalho gerada
newBook.Close SaveChanges:=True
Set newBook = Nothing
'MsgBox "O arquivo foi exportado com sucesso! ", vbInformation, "Exportar arquivos"
Range("A:A") = ""
Application.ScreenUpdating = True
End Sub
Nesse código, a planilha é copiada para um arquivo do excel em branco que é salvo no lugar original do arquivo CSV, com o mesmo nome, e é ai que o problema acontece, ao abrir o novo arquivo gerado no sistema de análise, este apesenta erro pois o formato está incorreto, ao abrir o arquivo csv no bloco de notas encontro o erro ele está como neste exemplo:
0.800,,,,,
0.870,,,,,
0.890,,,,,
0.880,,,,,
ai está o erro, foram salvas mais 4 colunas, desnecessárias, eu imagino que estas colunas estejam lá pois utilizo imagens como botões na planilha para chamar cada macro, uma possibilidade que imagino resolver seria ao invés de copiar toda a planilha, copiar apenas a coluna A para a nova planilha, mas ja tentei alterar o código para:
ThisWorkbook.ActiveSheet.Range("A:A").Copy Before:=newBook.Sheets(1)
ou
ThisWorkbook.ActiveSheet.Column("A:A").Copy Before:=newBook.Sheets(1)
Mas não funcionou, a solução temporária que utilizo é, abrir arquivo por arquivo, e substituir as 5 virgulas por um espaço vazio, e então assim o sistema consegue ler os arquivos corretamente.
então, o que eu preciso:
copiar apenas a Coluna A para a nova planilha, ou apagar todas estas virgulas sem a necessidade de fazer arquivo por arquivo.
desculpa pela novela escrita aqui, mas como eu disse se alguém souber uma alternativa para a primeira gambiarra, todo o resto pode ser alterado.
vou deixar a planilha e um arquivo CSV em anexo como exemplo. Abraços...
Postado : 11/08/2017 9:11 pm