Excel - Trích xuất dữ liệu từ các cột được chỉ định

Vấn đề

Tôi có một số cột dữ liệu trông giống như thế này:

 dữ liệu1 ... dữ liệu2 ... dữ liệu3 val ......... val ........ val val ......... val ........ val val ......... val ........ val val ......... val ........ val 

(data1-3 chỉ là tên của dữ liệu trong các cột)

Tôi muốn chuyển đổi ít nhiều tự động thành tệp .csv được sửa đổi dọc theo các dòng sau:

 (dữ liệu3) (dữ liệu1) (dữ liệu 2) val ........- val ....... val val ........- val ....... val val .. ......- val ....... val val ........- val ....... val 

Các tiêu đề cột đặt bên trong () vì chúng không được hiển thị trong tệp .csv. Thứ tự của data1-3 là ngẫu nhiên trong ví dụ của tôi, tôi cần có thể sử dụng một thứ tự khác. Tôi biết cách định dạng các ô để thay đổi giá trị thành âm.

Tôi hy vọng nó sẽ giống như một công thức lấy dữ liệu từ một cột được đặt tên trong một tệp; các ô trong cột cuối cùng sẽ trông giống như '= [path / sourcefile.xls] sheetname! cột-value: "data2"'. Điều này có thể tắt và thậm chí không thể trong excel, và nếu không muốn biết.

Ngoài ra, tệp nguồn sẽ chứa các cột sẽ không được sử dụng trong tệp csv. Do đó, quá trình cần xác định các cột được chỉ định trong một tệp đã chỉ định, sao chép và sắp xếp lại chúng và sau đó dán chúng vào .csv.

Có ý tưởng nào để làm việc này không?

Dung dịch

Mã dưới đây giả định

  • 1. Dữ liệu nằm trong trang tính có tên là Sheet1
  • 2. Một bảng tên tạm thời myTempSheet có thể được tạo
  • 3. Tên tệp CSV sẽ được lưu trong tempCSV.csv
  • 4. Không có cột trống nào được yêu cầu

Sử dụng

Sau khi dán mã, thực thi macro. Nó sẽ hỏi bạn làm thế nào bạn muốn cột xuất hiện trong CSV. Vì vậy, nếu cột đầu tiên bạn muốn là D, câu trả lời đúng là 4. Một khi bạn đã hoàn thành việc thông báo các cột sẽ xuất hiện như thế nào, chỉ cần nhấn ok mà không có bất kỳ giá trị nào.

Mã số:

 Sub createdFile () Dim numOfCol As Integer Dim colNum As Integer Dim myTempSheet As String Dim dataSheet As String Dim colValue As Variant Dim ColIndex () As Integer Dim cvsName As String ThisWorkbook.Save myTempSheet = "myTempSheet =" tempCSV "Sheets (dataSheet) .Chọn numOfCol = Cells (1, Columns.Count) .End (xlToLeft) .Column ReDim ColIndex (numOfCol) Cho colNum = 1 To numOfCol colValue =" & "trong tệp CVS", "Vị trí col") Nếu colValue = "" Sau đó thoát cho Else Col Index (colNum) = colValue End If Next On Error Resume Next Sheets (myTempSheet) .Delete On Error GoTo 0 Sheets.Add ActiveSheet. Name = myTempSheet For colNum = 1 To numOfCol If ColIndex (colNum)> 0 Then Sheets (dataSheet) .Select Cột (ColIndex (colNum)). Chọn Selection.Copy Sheets (myTempSheet) .Select Cột (colNum). xlValue Else Thoát cho kết thúc nếu các trang tiếp theo (myTempSheet) .Chọn numOfCol = Các ô (1, Cột. Số tiền) .End (xlToLe ft) .Column For colNum = 1 To numOfCol If Cells (1, colNum) "" Then Cells (1, colNum) = "(" & Cells (1, colNum) & ")" End If Next ActiveWorkbook.SaveAs _ Filename: = cvsName & ".csv", _ FileFormat: = xlCSV, _ CreateBackup: = True End Sub 

chú thích

Cảm ơn rizvisa1 cho mẹo này trên diễn đàn.

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên