Xin giúp đỡ code VBA chép cột dữ liệu có điều kiện từ file này sang file khác

  • Thread starter Thread starter acrox84
  • Ngày gửi Ngày gửi
Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

acrox84

Thành viên hoạt động
Tham gia
22/3/08
Bài viết
116
Được thích
31
Chào mọi người, mình làm ở điểm gom hàng Chuyển phát nhanh, nhiệm vụ của mình là mỗi thứ Hai, Tư, Sáu xuất file excel, lọc cột "Thời gian ký nhận" của shipper giao hàng thành công mà trả tiền cho Khách gửi.
Đầu tháng này, bên IT tăng độ khó game, tách cột cần thiết này qua file riêng khác, làm mình dò thủ công mờ cả mắt, chỉ sợ số liệu nhiều làm sai sót trả lộn tiền cho khách thì toi đời, nên mong mọi người giúp đỡ cách xử lý tốt hơn. Cảm ơn mọi người rất rất nhiều!

Mô tả vấn đề:
1) Dựa trên Mã Đơn (cột A) copy "Thời gian ký nhận" (cột L, file dulieu2) tương ứng sang cột trống AH ở file dulieu1
2) Do file dulieu1 và dulieu2, mình xuất và thay thế thường xuyên nên có tác giả nào cho file excel kèm nút đính code VBA có chức năng gộp 2 file thành file dulieu.xlsx thì mình tiện sử dụng hơn.
Đặc điểm 2 file này khi export ra là không thay đổi cấu trúc hoặc thứ tự các cột dữ liệu đều cố định như tệp đính kèm.

*Trường hợp đúng thì sẽ có kết quả mong muốn như thế này ở cột AH:
2023-04-07 20-54-13.jpg

p/s: nếu yêu cầu nhờ vả có độ khó cao hoặc có gì quá đáng thì mong các bạn bỏ qua, nhu cầu của mình cấp thiết như thế mà cũng không quen bạn nào giỏi code VBA nên mạo muội lập thớt nhờ vả..
Chúc mọi người cuối tuần vui vẻ ^^!
 

File đính kèm

Giải pháp
Cái chức năng tạo thêm thư mục backup file mình chưa cần.
Nếu có thể, bạn sửa lại ntn mà không chép đè lên file dulieu thì mình có thể kiểm tra lại nguồn dulieu1 và dulieu2.
Tức là cùng thư mục có dulieu1 và dulieu2, bấm nút chạy code VBA sẽ ra file mới dulieu.xlsx và không xóa dulieu1 và dulieu2.
Cảm ơn bạn rất nhiều!

View attachment 290261
Bạn chạy chức năng trong sheet3:
Mã:
Option Explicit

Private Sub CommandButton1_Click()

    Dim wb As Workbook, wbNew As Workbook, ws As Worksheet, wsNew As Worksheet, col As Range, colNew As Range
    Dim lastRow As Long, lastCol As Long, lastRowNew As Long
    Dim colTitle As String, sFolder As String, newFileName As String, filePath As String
    Dim fso As Object, fileNames As Variant, fileName...
Mình cũng chưa hiểu rõ vấn đề bạn cần, tuy nhiên bạn thử sửa lại đoạn sau:
Mã:
'-----Code khác giữ nguyên--------------
For Each fileName In fileNames
        filePath = sFolder & "\" & fileName
        If Not fso.FileExists(filePath) Then
            MsgBox "Khong tim thay tap tin: " & vbNewLine & filePath, vbCritical
            GoTo End_
        End If
        Set wb = Workbooks.Open(filePath):  Set ws = wb.Worksheets(1)
        lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
        lastCol = ws.Cells(9, ws.Columns.Count).End(xlToLeft).Column
        If lastRowNew = 1 Then
            ws.UsedRange.Copy Destination:=wsNew.Cells(lastRowNew, 1)
            lastRowNew = lastRow
        Else
            For Each col In ws.Range(ws.Cells(9, 1), ws.Cells(9, lastCol))
                colTitle = col.Cells(1).Value
                Set colNew = wsNew.Rows(9).Find(colTitle, LookIn:=xlValues, LookAt:=xlWhole)
                If Not colNew Is Nothing Then
                    ws.Range(col.Cells(10), col.Cells(lastRow)).Copy Destination:=wsNew.Cells(wsNew.Cells(wsNew.Rows.Count, colNew.Column).End(xlUp).Row + 1, colNew.Column)
                End If
            Next col
            lastRowNew = lastRowNew + lastRow - 1
        End If
        wb.Close SaveChanges:=False
    Next fileName
'-----Code khác giữ nguyên--------------

Nếu có vấn đề gì thì bạn mô tả rõ hơn để mọi người cùng xem và giúp bạn,
Cảm ơn.
Cảm ơn bạn HNP, hồi tháng 11 mình vướng vấn đề này nên có lên forum nhờ mọi người đã xử lý rồi, chút mình copy code của bạn add vào thử lại xem sau, do bạn kia cung cấp cách giải quyết vấn đề khác.
Thời gian đó mình ko thấy bạn online diễn đàn nên cũng hơi lo, năm mới chúc bạn và gia đình nhiều sức khỏe, thật nhiều may mắn. Cảm ơn bạn rất nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom