Excel - Extraherar data från angivna kolumner

Problem

Jag har några kolumner med data som ser något ut så här:

 data1 ... data2 ... data3 val ......... val ........ val val ......... val ........ val val ......... val ........ val val ......... val ........ val 

(data1-3 är bara namnen på data i kolumnerna)

Jag vill konvertera detta mer eller mindre automatiskt till en .csv-fil som ändras på följande sätt:

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

Kolumnrubriker läggs in () eftersom de inte ska visas i .csv-filen. Ordningen av data1-3 är slumpmässig i mitt exempel, jag måste kunna använda en annan ordning. Jag vet hur man formaterar cellerna för att ändra värdena till negativ.

Jag förväntar mig att det är något som en formel som hämtar data från en namngiven kolumn i en fil; cellerna i den sista kolumnen skulle se ut som "= [path / sourcefile.xls] sheetname! column-values:" data2 "'. Det här kan vara långt ifrån och inte ens möjligt excel, och om det inte skulle jag skulle vilja veta.

Även källfilen innehåller kolumner som inte kommer att användas i csv-filen. Processen behöver därför identifiera de angivna kolumnerna i en angiven fil, kopiera och omordna dem och klistra in dem i .csv.

Några idéer om hur man gör det här?

Lösning

Koden nedan antar

  • 1. Uppgifterna finns i arket Sheet1
  • 2. En temporär arknamn myTempSheet kan skapas
  • 3. CSV-filnamnet som ska sparas i tempCSV.csv
  • 4. Inga tomma kolumner krävs

Att använda

Efter att ha klistrat in koden, kör makroen. Det kommer att fråga dig hur du vill få kolumnen att visas i CSV. Så om den första kolumnen du vill ha är D, är det korrekta svaret 4. När du är klar med att informera hur kolumner ska visas, tryck bara på ok utan något värde.

Koda:

 Sub createFile () Dim numOfCol Som heltal Mått colNum Som heltal Dim myTempSheet som sträng Dim dataSheet som sträng Dim colValue Som variant Dim ColIndex () Som helhet Dim cvsName Som sträng ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = " tempCSV "Sheets (dataSheet) .Välj numOfCol = Cells (1, Columns.Count) .End (xlToLeft). Kolumn ReDim ColIndex (numOfCol) För colNum = 1 Till numOfCol colValue = InputBox (" Vilken kolumn ska vara i position "& colNum & kolumnen ", " Col Position ") Om colValue =" "Avsluta för annan ColIndex (colNum) = colValue Enda om nästa på fel Fortsätt nästa ark (myTempSheet) .Delete On Error GoTo 0 Sheets.Add ActiveSheet. Namn = myTempSheet För colNum = 1 Till numOfCol Om ColIndex (colNum)> 0 Då Sheets (dataSheet) .Välj kolumner (ColIndex (colNum)). Välj Selection.Copy Sheets (myTempSheet) .Välj kolumner (colNum) .Välj ActiveSheet.PasteSpecial xlValue Else Exit till slutet om nästa ark (myTempSheet) .Välj numOfCol = Cells (1, Columns.Count) .End (xlToLe ft). Kolumn För colNum = 1 Till numOfCol Om celler (1, colNum) "" Då celler (1, colNum) = "(" & celler (1, colNum) & ")" Avsluta om nästa ActiveWorkbook.SaveAs _ Filnamn: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Notera

Tack till rizvisa1 för detta tips på forumet.

Tidigare Artikel Nästa Artikel

Bästa Tipsen