Excel - Mengekstrak data dari lajur yang ditentukan

Isu

Saya mempunyai beberapa lajur data yang kelihatan agak seperti ini:

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

(data1-3 hanya nama-nama data dalam lajur)

Saya ingin menukarkan ini lebih atau kurang secara automatik ke fail .csv yang diubah suai di sepanjang baris ini:

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

Tajuk-tajuk lajur dimasukkan ke dalam () kerana mereka tidak sepatutnya dipaparkan dalam fail .csv. Perintah data1-3 adalah rawak dalam contoh saya, saya perlu menggunakan perintah yang berbeza. Saya tahu bagaimana untuk memformatkan sel-sel untuk mengubah nilai menjadi negatif.

Saya mengharapkan ia menjadi sesuatu seperti rumus yang mengambil data dari lajur yang dinamakan dalam fail; sel-sel dalam lajur terakhir akan kelihatan seperti '= [path / sourcefile.xls] sheetname! column-values: "data2"'. Ini mungkin akan hilang dan tidak mungkin dalam kecemerlangan, dan jika tidak, saya ingin tahu.

Juga sourcefile akan mengandungi lajur thats tidak akan digunakan dalam csv-file. Oleh itu, proses itu perlu mengenal pasti lajur yang ditentukan dalam fail tertentu, menyalin dan menyusun semula dan kemudian memasukkannya ke dalam .csv.

Sebarang idea bagaimana untuk melakukan ini?

Penyelesaian

Kod di bawah mengandaikan

  • 1. Data dalam lembaran yang disebut Sheet1
  • 2. Nama lembaran sementara myTempSheet boleh dibuat
  • 3. Nama fail CSV akan disimpan di tempCSV.csv
  • 4. Tiada ruang kosong dikira semula

Untuk menggunakan

Selepas menampal kod, jalankan makro. Ia akan menanyakan kepada anda bagaimana anda ingin mempunyai lajur muncul dalam CSV. Jadi jika lajur pertama yang anda mahu adalah D, jawapan yang betul ialah 4. Setelah anda selesai dengan memberitahu bagaimana lajur akan muncul, tekan ok dengan nilai apa pun.

Kod:

 Sub createFile () Dim numOfCol Sebagai Integer Dim colNum Sebagai Integer Dim myTempSheet Sebagai String Dim dataSheet Sebagai String Dim colValue Sebagai Variant Dim ColIndex () Sebagai Integer Dim cvsName Sebagai String ThisWorkbook.Save myTempSheet = "myTempSeet" dataSheet = "Sheet1" cvsName = " Column ReDim ColIndex (numOfCol) Untuk colNum = 1 Untuk numOfCol colValue = InputBox ("Lajur apa yang perlu berada dalam kedudukan" & colNum & "di dalam fail CVS", "Posisi Kol") Jika colValue = "" Kemudian Keluar Untuk Lain ColIndex (colNum) = colValue End Jika Next On Ralat Sambungkan Helaian Seterusnya (myTempSheet) .Delete On Error GoTo 0 Sheets.Add ActiveSheet. Nama = myTempSheet Untuk colNum = 1 Untuk numOfCol Jika ColIndex (colNum)> 0 Kemudian Lembaran (data Lembaran) .Select Columns (ColIndex (colNum)) Pilih Selection.Copy Sheets (myTempSheet) .Select Columns (colNum) .Select ActiveSheet.PasteSpecial xlValue Else Exit For End Jika Sheett Next (myTempSheet). Pilih numOfCol = Sel (1, Columns.Count) .End (xlToLe ft). Column For colNum = 1 Untuk numOfCol Jika Sel (1, colNum) "" Kemudian Sel (1, colNum) = "(" & Sel (1, colNum) & ")" Akhir Jika Seterusnya ActiveWorkbook.SaveAs _ = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

Catatan

Terima kasih kepada rizvisa1 untuk tip ini di forum.

Artikel Sebelumnya Artikel Seterusnya

Tip-Tip Utama