Excel - Extraindo dados de colunas especificadas

Questão

Eu tenho algumas colunas de dados parecendo assim:

 dados1 ... dados2 ... dados3 val ......... val ........ val val ......... val ........ val val ......... val ........ val val ......... val ........ val 

(data1-3 são apenas nomes dos dados nas colunas)

Eu quero converter isso mais ou menos automaticamente para um arquivo .csv modificado ao longo destas linhas:

 (data3) (data1) (data2) val ........ val ...... val val ........ val ....... val val .. ......- val ....... val val ........ val ....... val 

Cabeçalhos de coluna colocar dentro () porque eles não deveriam estar mostrando no arquivo .csv. A ordem dos dados1-3 é aleatória no meu exemplo. Preciso usar uma ordem diferente. Eu sei como formatar as células para alterar os valores em negativos.

Eu esperaria que fosse algo como uma fórmula recuperando dados de uma coluna nomeada em um arquivo; as células na última coluna seriam algo como '= [path / sourcefile.xls] sheetname! column-values: "data2"'. Isso pode estar fora e nem sequer ser possível no excel, e se não for, eu gostaria de saber.

Além disso, o arquivo de origem conterá colunas que não serão usadas no arquivo csv. Portanto, o processo precisa identificar as colunas especificadas em um arquivo especificado, copiá-las e reorganizá-las e, em seguida, colá-las no .csv.

Algumas ideias em como fazer isso?

Solução

O código abaixo presume

  • 1. Os dados estão na folha chamada Folha1
  • 2. Um nome de folha temporário myTempSheet pode ser criado
  • 3. O nome do arquivo CSV a ser salvo em tempCSV.csv
  • 4. Nenhuma coluna em branco é requried

Usar

Depois de colar o código, execute a macro. Ele perguntará como você deseja que a coluna apareça no CSV. Então, se a primeira coluna que você quer é D, a resposta correta é 4. Assim que você terminar de informar como as colunas aparecerão, apenas pressione ok sem nenhum valor.

Código:

 Sub createFile () Dim numOfCol As Integer Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () As Integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Folha1" cvsName = " tempCSV "Folhas (dataSheet) .Selecionar numOfCol = Células (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Para colNum = 1 Para numOfCol colValue = InputBox (" Qual coluna deve estar na posição "& colNum & "no arquivo CVS", "Col Col Position") Se colValue = "" Então saia para Else ColIndex (colNum) = colValue End If Next On Error Resume Next Sheets (myTempSheet) .Delete On Error Ir para 0 Sheets.Add ActiveSheet. Name = myTempSheet Para colNum = 1 Para numOfCol Se ColIndex (colNum)> 0 Then Sheets (dataSheet) .Selecione Colunas (ColIndex (colNum)). Selecione Selection.Copy Sheets (myTempSheet) .Selecione Colunas (colNum) .Selecione ActiveSheet.PasteSpecial xlValue Else Sair para End If Next Sheets (myTempSheet) .Selecione numOfCol = Cells (1, Columns.Count) .End (xlToLe ft. .Column Para colNum = 1 Para numOfCol Se Cells (1, colNum) "" Then Cells (1, colNum) = "(" & Cells (1, colNum) & ")" End If Próximo ActiveWorkbook.SaveAs _ Filename: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Nota

Graças a rizvisa1 por esta dica no fórum.

Artigo Anterior Próximo Artigo

Principais Dicas