Excel - Extracting data fra spesifiserte kolonner

Utgave

Jeg har noen kolonner med data som ser litt ut som dette:

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

(data1-3 er bare navn på dataene i kolonnene)

Jeg vil konvertere dette mer eller mindre automatisk til en .csv-fil endret på disse linjene:

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

Kolonneoverskrifter settes inn () fordi de ikke skal vises i .csv-filen. Ordren av data1-3 er tilfeldig i mitt eksempel, jeg må kunne bruke en annen ordre. Jeg vet hvordan du formaterer cellene for å endre verdiene til negativer.

Jeg forventer at det skal være noe som en formel som henter data fra en navngitt kolonne i en fil; cellene i den siste kolonnen vil se ut som '= [path / sourcefile.xls] sheetname! column-values: "data2"'. Dette kan være langt unna og ikke engang mulig i Excel, og hvis det ikke er, vil jeg gjerne vite det.

Også kildefilen inneholder kolonner som ikke skal brukes i csv-filen. Prosessen må derfor identifisere de angitte kolonnene i en spesifisert fil, kopiere og omorganisere dem og deretter klistre dem inn i .csv.

Noen ideer om hvordan du gjør dette?

Løsning

Koden nedenfor forutsetter

  • 1. Dataene er i ark kalt Sheet1
  • 2. Et midlertidig arknavn myTempSheet kan opprettes
  • 3. CSV-filnavnet som skal lagres i tempCSV.csv
  • 4. Ingen blank kolonne er påkrevd

Å bruke

Etter at du har lagt inn koden, må du utføre makroen. Det vil spørre deg hvordan du vil at kolonnen skal vises i CSV. Så hvis den første kolonnen du vil ha er D, er det riktige svaret 4. Når du er ferdig med å informere om hvordan kolonner vil vises, trykk bare ok uten noen verdi.

Kode:

 Sub createFile () Dim numOfCol Som helhet Dim colNum som helhet Dim myTempSheet som streng Dim dataSheet som streng Dim ColValue Som variant Dim ColIndex () Som integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = " tempCSV "Sheets (dataSheet) .Velg numOfCol = Cells (1, Columns.Count). End (xlToLeft). Kolonne ReDim ColIndex (numOfCol) For colNum = 1 Til numOfCol colValue = InputBox (" Hvilken kolonne skal være i posisjon "& colNum & "i CVS-filen", "Col-posisjon") Hvis colValue = "" Avslutt deretter for andre ColIndex (colNum) = colValue End hvis neste på feil fortsette neste ark (myTempSheet) .Delete On Error GoTo 0 Sheets.Add ActiveSheet. Navn = myTempSheet For colNum = 1 Til numOfCol Hvis ColIndex (colNum)> 0 Så ark (dataSheet) .Velg kolonner (ColIndex (colNum)). Velg Select.Copy Sheets (myTempSheet) .Velg kolonner (colNum) .Velg ActiveSheet.PasteSpecial xlValue Else Exit For End Hvis Next Sheets (myTempSheet) .Velg numOfCol = Cells (1, Columns.Count) .End (xlToLe ft.) .Solumn for colNum = 1 til numOfCol Hvis celler (1, colNum) "" Så celler (1, colNum) = "(" & celler (1, colNum) & ")" Slutt hvis neste ActiveWorkbook.SaveAs _ Filnavn: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Merk

Takk til rizvisa1 for dette tipset på forumet.

Forrige Artikkel Neste Artikkel

Beste Tips