Copy dữ liệu ra file khác theo điều kiện? (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hoangkhoi2012

Thành viên mới
Tham gia
12/4/16
Bài viết
11
Được thích
1
Xin chào các anh, chị GPE

Em có 1 file tính toán như file đính kèm, bây giờ em muốn gửi cho khách hàng nhưng cần bỏ đi vài dòng và vài cột như sau:

1- Tạo ra 1 file workbook mới và Copy toàn bộ dữ liệu trong sheet "Dieu Khoan", "Tong Gia", "Cong Viec"( Dưới dạng không còn công thức) sang workbook mới với 3 sheet có tên tương ứng.

-> Trong sheet "Cong Viec":tại cột F có chữ Hide ( Hoặc Hide1...) thì bỏ qua các dòng đó, chỉ copy các dòng còn lại. Cột E, G,I:L cũng không cần copy sang workbook mới ( Em có làm 1 sheet mẫu)

2- File workbook mới tạo sẽ ở cùng thư mục với file gốc và theo tên file gốc-khach hang

Ví dụ: File gốc tên là: GPE.xlsm >> File tạo ra là : GPE-khach hang.xlsx

Mong anh chị xem giúp em phần code này như thế nào nha, em cảm ơn rất nhiều.
 

File đính kèm

Mã:
Public Sub GPE()
Dim Arr, Wb As Workbook, Name As String, Ws As Worksheet, Path As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Name = ThisWorkbook.Name: Path = ThisWorkbook.Path & "\"
Arr = Array("Dieu khoan", "Tong gia", "Cong Viec")
Sheets(Arr).Copy
For Each Ws In ActiveWorkbook.Worksheets
    Ws.UsedRange.Value = Ws.UsedRange.Value
    If Ws.Name = "Cong Viec" Then
        Ws.Range("A8:W" & Ws.Range("B65000").End(3).Row).AutoFilter 6, "Hide*"
        Ws.Range("A9:W" & Ws.Range("B65000").End(3).Row).EntireRow.Delete
        Ws.AutoFilterMode = False
    End If
Next Ws
ActiveWorkbook.Close True, Path & Left(Name, Len(Name) - 5) & " - khach hang.xlsx"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Code của anh chạy đúng ý rồi ạ, Anh giúp em thêm phần xóa các cột luôn nha.
Nhưng Anh cho em hỏi thêm chút về code này:
- em đọc code của anh thì hiểu là a copy cả 3 sheet sang workbook mới sau đó mới bỏ công thức và xóa các dòng có chữ "Hide", Em nghĩ như vậy nó sẽ chậm nếu dữ liệu của em nhiều.

Em có ý thế này: Bên file gốc mình sẽ filter bỏ các dòng "Hide*", sau đó copy và paste Value qua workbook mới, em nghĩ nó sẽ nhanh hơn, nhờ anh xem xét giúp em nha.
 
Upvote 0
Xóa cột thì:

Mã:
Public Sub GPE()
Dim Arr, Wb As Workbook, Name As String, Ws As Worksheet, Path As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Name = ThisWorkbook.Name: Path = ThisWorkbook.Path & "\"
Arr = Array("Dieu khoan", "Tong gia", "Cong Viec")
Sheets(Arr).Copy
For Each Ws In ActiveWorkbook.Worksheets
    Ws.UsedRange.Value = Ws.UsedRange.Value
    If Ws.Name = "Cong Viec" Then
        Ws.Range("A8:W" & Ws.Range("B65000").End(3).Row).AutoFilter 6, "Hide*"
        Ws.Range("A9:W" & Ws.Range("B65000").End(3).Row).EntireRow.Delete
        Ws.AutoFilterMode = False
        Ws.Range("E:E,G:G,I:L").EntireColumn.Delete
    End If
Next Ws
ActiveWorkbook.Close True, Path & Left(Name, Len(Name) - 5) & " - khach hang.xlsx"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Còn việc bạn có ý thế này: nó sẽ nhanh hơn??? bạn có chắc...??? Cho nên cứ thử cho nhiều dữ liệu và chạy đi...code này là nhanh rồi, Nên đừng tơ tưởng gì nữa nhé...
Xin đa tạ anh rất nhiều ạ.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom