Excel - Tietojen purkaminen tietyistä sarakkeista

Ongelma

Minulla on joitakin sarakkeita, jotka näyttävät hieman tältä:

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

(data1-3 ovat vain sarakkeissa olevien tietojen nimiä)

Haluan muuntaa tämän enemmän tai vähemmän automaattisesti .csv-tiedostoksi, jota on muutettu näillä linjoilla:

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

Sarakkeiden otsikot asetetaan sisään (), koska niiden ei tarvitse näkyä .csv-tiedostossa. Esimerkin mukaan tietojen järjestys1-3 on satunnainen, minun täytyy pystyä käyttämään toista järjestystä. Tiedän, miten solut muotoillaan muuttamaan arvot negatiiveiksi.

Odotan, että se on jotain kaavaa, joka noutaa tiedostot nimetyistä sarakkeista; viimeisimmän sarakkeen solut näyttävät siltä kuin '= [polku / sourcefile.xls] arkin nimi! sarakkeen arvot: "data2". Tämä saattaa olla pois päältä eikä edes mahdollista Excelissä, ja jos se ei halua tietää.

Myös lähdetiedosto sisältää sarakkeita, joita ei käytetä csv-tiedostossa. Siksi prosessin on määritettävä määritetyssä tiedostossa määritetyt sarakkeet, kopioitava ja järjestettävä ne uudelleen ja liitettävä ne .csv-tiedostoon.

Kaikki ajatukset siitä, miten tämä tehdään?

Ratkaisu

Alla oleva koodi olettaa

  • 1. Tiedot ovat arkilla nimeltä Sheet1
  • 2. Voit luoda väliaikaisia ​​arkin nimiä myTempSheet
  • 3. CSV-tiedoston nimi tallennetaan tempCSV.csv-tiedostoon
  • 4. Mitään tyhjää saraketta ei vaadita

Käyttää

Kun olet liittänyt koodin, suorita makro. Se kysyy, miten haluat, että sarake näkyy CSV: ssä. Joten jos ensimmäinen haluamasi sarake on D, oikea vastaus on 4. Kun olet valmis ilmoittamaan, miten sarakkeet näkyvät, paina ok ilman mitään arvoa.

Koodi:

 Sub createFile () Dim numOfCol kuten integer Dim colNum Integer Dim myTempSheet merkkijonoina Dim dataSheet Stringina Dim colValue As Variantina Dim ColIndex () Integer Dim cvsName kuin String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = " tempCSV "Sheets (dataSheet) .Valitse numOfCol = solut (1, sarakkeet. laskenta) .End (xlToLeft) .Pylväs ReDim ColIndex (numOfCol) ColNum = 1: lle NumOfCol colValue = InputBox (" Mitä sarakkeen pitäisi olla asennossa "& colNum & "CVS-tiedostossa", "Col Position") Jos colValue = "" Sitten Exit for Else ColIndex (colNum) = colValue End Jos seuraava on virhe Jatka seuraavia arkkeja (myTempSheet). Poista virhe Virhe 0 Sheets.Add ActiveSheet. Nimi = myTempSheet varten ColNum = 1 NumOfCol Jos ColIndex (colNum)> 0 Sitten Sheets (dataSheet) .Valitse sarakkeet (ColIndex (colNum)). Valitse valinta.Kopioi arkit (myTempSheet) .Valitse sarakkeet (colNum) .Valitse ActiveSheet.PasteSpecial xlValue Else Exit loppu Jos seuraava arkki (myTempSheet) .Valitse numOfCol = solut (1, sarakkeetCount) .End (xlToLe ft) .Column For colNum = 1 NumOfCol Jos solut (1, colNum) "" Sitten solut (1, colNum) = "(" & solut (1, colNum) & ")" Lopeta, jos seuraava ActiveWorkbook.SaveAs _ Tiedostonimi: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Huomautus

Kiitos rizvisa1: stä tästä vinkistä foorumissa.

Edellinen Artikkeli Seuraava Artikkeli

Top Vinkkejä