Excel - Extragerea datelor din coloanele specificate

Problema

Am câteva coloane de date care arată cam așa:

 datele1 ... data2 ... data3 val ......... val ........ val val ......... val ........ val val ......... val ........ val val ......... val ........ val 

(datele1-3 sunt doar numele datelor din coloane)

Vreau să convertesc acest lucru mai mult sau mai puțin automat într-un fișier .csv modificat de-a lungul acestor linii:

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

Anteturile de coloane puse înăuntru (), deoarece nu ar trebui să apară în fișierul .csv. Ordinea datelor1-3 este aleatorie în exemplul meu, trebuie să pot folosi o altă comandă. Știu cum să formatez celulele pentru a schimba valorile în negative.

M-aș aștepta ca aceasta să fie ceva asemănător cu o formulă de preluare a datelor dintr-o coloană numită într-un fișier; celulele din ultima coloană ar arăta mai degrabă ca '= [cale / sourcefile.xls] foaie de nume! coloană-valori: "data2"'. Acest lucru ar putea fi mai departe și nu este posibil în Excel, și dacă nu este, aș vrea să știu.

De asemenea, fișierul sursă va conține coloane care nu vor fi utilizate în fișierul csv. Prin urmare, procesul trebuie să identifice coloanele specificate într-un fișier specificat, să le copieze și să le rearanjeze și apoi să le lipsească în .csv.

Orice idei despre cum să faceți acest lucru?

Soluţie

Codul de mai jos presupune

  • 1. Datele sunt în foaia numită Sheet1
  • 2. Poate fi creată o listă temporară a tabelului myTempSheet
  • 3. Numele fișierului CSV să fie salvat în tempCSV.csv
  • 4. Nu este necesară o coloană necompletată

A folosi

După ce lipiți codul, executați macroul. Vă va întreba cum doriți să apară coloana în CSV. Deci, dacă prima coloană pe care o doriți este D, răspunsul corect este 4. Odată ce ați terminat cu informarea despre modul în care vor apărea coloanele, apăsați OK fără nici o valoare.

Cod:

 Sub createFile () Dim numOfCol ca integer Dim colNum ca integer Dim myTempSheet ca șir Dim dataSheet ca șir Dim colValue ca variantă Dim ColIndex () ca număr întreg cvsName ca șir ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = " temp.svg ") .Select numOfCol = Celule (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Pentru colNum = 1 Pentru numOfCol colValue = InputBox (" Ce coloană trebuie să fie în poziție "& colNum & "în fișierul CVS", "Col Poziție") Dacă colValue = "" Apoi Exit Pentru Else ColIndex (colNum) = ColValue Sfârșit Dacă Următorul Eroare Reluați următoarele Sheets (myTempSheet) .Delete On Error GoTo 0 Sheets.Add ActiveSheet. Nume = myTempSheet Pentru colNum = 1 Pentru numOfCol Dacă ColIndex (colNum)> 0 Apoi pentru Sheets (dataSheet) .Select Columns (ColIndex (colNum)) Selectați Selection.Copy Sheets (myTempSheet) .Select Columns (colNum) .Select ActiveSheet.PasteSpecial xlValue Exit altfel pentru sfârșitul fișierelor următoare (myTempSheet) .Select numOfCol = Celule (1, Columns.Count) .End (xlToLe ft) .Column Pentru colNum = 1 Pentru numOfCol Dacă celulele (1, colNum) "" Atunci celulele (1, colNum) = "(" & Cells (1, colNum) & ") End If Next ActiveWorkbook.SaveAs _ = cvsName & ".csv", _FileFormat: = xlCSV, _CreateBackup: = True End Sub 

Notă

Datorită lui rizvisa1 pentru acest sfat pe forum.

Articolul Precedent Articolul Următor

Cele Mai Importante Sfaturi