GỘP FILE VÀ TỔNG HỢP DỮ LIỆU! (1 người xem)

Liên hệ QC

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

huonglien1901

GPE là ngôi nhà thứ 2 của tôi!!!
Tham gia
17/4/16
Bài viết
2,701
Được thích
2,434
Giới tính
Nam
Nghề nghiệp
Nhân viên kỹ thuật in ấn
Chào mọi người!

Em có vấn đề nhờ mọi người giúp.

Em có 3 sheet: t1, t5, t23.

Em muốn copy file t5 vào file t1, copy file t23 vào t1(dữ liệu cứ nối tiếp nhau, t1, t5, t23 không lấy tiêu đề cột chỉ lấy dữ liệu file t5,t23. Xóa bỏ Cột A trong file t1.
sau đó dùng hàm mid để lấy ra kí tự 79,88(mid(cột Cext,15,2) rồi xóa 79,88 đi.
Em muốn định dạng cột SKU QUANLITY, Cột Weight/SKU, Cột Purchase Stock Value, Cột Stock Cost Value, Sale Stock Value là kiểu Number.
Cột DATE OF DATA, Cột SEQ thì xóa bỏ.
Cột Suppler Code dò kết quả bên Sheet Oder dass, dựa vào Cột Barcode. Nếu trường hợp không tìm thấy thì bỏ trống.
Cột Suppler Desc dò kết quả bên sheet Oderdass dựa vào cột Barcode. Nếu vẫn không tìm thấy thì dò kết quả dựa vào cột CODE, Nếu không tìm thấy hoặc lỗi #NA thì gán giá trị rỗng.
Em cảm ơn mọi người nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Trong code có lệnh xóa trước khi gán dữ liệu mới rồi?
PHP:
With Sheets("GPE")
    .Range("A3:B60000").Resize(, 18).ClearContents
    .Range("A3").Resize(K, 18) = dArr
End With
Bạn cứ tạo một cái nút rồi gán cái Sub này cho nó.
PHP:
Public Sub XOA()
Sheets("GPE").Range("A3:R60000").ClearContents
End Sub
Em cảm ơn Bác nhiều!
Em chúc Bác có nhiều sức khỏe, Chắc có dịp em về An Giang thăm Bác một lần. Em hay đi làm thiện nguyện lắm, Ở chùa Vạn Đức ở trên Chùa Núi Cấm.

Một lần nữa em cảm ơn bác nhiều!
Em chúc bác ngày vui.
 
Upvote 0
Upvote 0
Tại file này em xuất trên phần mềm ra Anh ơi, Nó ra sao thì làm theo vậy đó Anh.
Test thử xem sao nhé:

Mã:
Sub LayDL()
    Dim v, strPath, strSQL As String
    v = Application.Version
    strPath = ThisWorkbook.FullName
    strSQL = "SELECT [t1$].SITE, [t1$].CEXT, [t1$].CODE, [t1$].BARCODE, [t1$].SU, [t1$].LV, [t1$].[Article Status], [t1$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t1$].[SKU quantity]) AS [SKU quantity], Val([t1$].[Weight/SKU]) AS [Weight/SKU], [t1$].[Unit purchase price], [t1$].[Unit Cost Price], [t1$].[Unit Sales Price], Val([t1$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t1$].[Stock Cost Value]) AS [Stock Cost Value], Val([t1$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t1$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t1$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    strSQL = strSQL & "union all SELECT [t5$].SITE, [t5$].CEXT, [t5$].CODE, [t5$].BARCODE, [t5$].SU, [t5$].LV, [t5$].[Article Status], [t5$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t5$].[SKU quantity]) AS [SKU quantity], Val([t5$].[Weight/SKU]) AS [Weight/SKU], [t5$].[Unit purchase price], [t5$].[Unit Cost Price], [t5$].[Unit Sales Price], Val([t5$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t5$].[Stock Cost Value]) AS [Stock Cost Value], Val([t5$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t5$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t5$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    strSQL = strSQL & "union all SELECT [t23$].SITE, [t23$].CEXT, [t23$].CODE, [t23$].BARCODE, [t23$].SU, [t23$].LV, [t23$].[Article Status], [t23$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t23$].[SKU quantity]) AS [SKU quantity], Val([t23$].[Weight/SKU]) AS [Weight/SKU], [t23$].[Unit purchase price], [t23$].[Unit Cost Price], [t23$].[Unit Sales Price], Val([t23$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t23$].[Stock Cost Value]) AS [Stock Cost Value], Val([t23$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t23$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t23$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft." & IIf(v <> "8.0", "ACE.OLEDB.12.0", "Jet.OLEDB.4.0") & ";Data Source=" & strPath & ";Extended Properties=Excel " & IIf(v <> "8.0", "12.0", "8.0")
        Application.ScreenUpdating = False
        Sheet5.Range("A2:V65000").ClearContents
        Sheet5.Range("A2").CopyFromRecordset .Execute(strSQL)
        Application.ScreenUpdating = True
    End With
End Sub
 
Upvote 0
Test thử xem sao nhé:

Mã:
Sub LayDL()
    Dim v, strPath, strSQL As String
    v = Application.Version
    strPath = ThisWorkbook.FullName
    strSQL = "SELECT [t1$].SITE, [t1$].CEXT, [t1$].CODE, [t1$].BARCODE, [t1$].SU, [t1$].LV, [t1$].[Article Status], [t1$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t1$].[SKU quantity]) AS [SKU quantity], Val([t1$].[Weight/SKU]) AS [Weight/SKU], [t1$].[Unit purchase price], [t1$].[Unit Cost Price], [t1$].[Unit Sales Price], Val([t1$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t1$].[Stock Cost Value]) AS [Stock Cost Value], Val([t1$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t1$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t1$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    strSQL = strSQL & "union all SELECT [t5$].SITE, [t5$].CEXT, [t5$].CODE, [t5$].BARCODE, [t5$].SU, [t5$].LV, [t5$].[Article Status], [t5$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t5$].[SKU quantity]) AS [SKU quantity], Val([t5$].[Weight/SKU]) AS [Weight/SKU], [t5$].[Unit purchase price], [t5$].[Unit Cost Price], [t5$].[Unit Sales Price], Val([t5$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t5$].[Stock Cost Value]) AS [Stock Cost Value], Val([t5$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t5$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t5$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    strSQL = strSQL & "union all SELECT [t23$].SITE, [t23$].CEXT, [t23$].CODE, [t23$].BARCODE, [t23$].SU, [t23$].LV, [t23$].[Article Status], [t23$].DESCRIPTION, IIf(IsNull([SUPCOD]),'#N/A',[SUPCOD]) AS SUPCOD1, IIf(IsNull([SUPPLIER]),'#N/A',[SUPPLIER]) AS SUPPLIER1, Val([t23$].[SKU quantity]) AS [SKU quantity], Val([t23$].[Weight/SKU]) AS [Weight/SKU], [t23$].[Unit purchase price], [t23$].[Unit Cost Price], [t23$].[Unit Sales Price], Val([t23$].[Purchase Stock Value]) AS [Purchase Stock Value], Val([t23$].[Stock Cost Value]) AS [Stock Cost Value], Val([t23$].[Sales Stock Value]) AS [Sales Stock Value] FROM [t23$] LEFT JOIN (SELECT DISTINCT [oder dass$].BARCODE, [oder dass$].SUPCOD, [oder dass$].SUPPLIER FROM [oder dass$]) as SubInfo ON [t23$].BARCODE = SubInfo.BARCODE WHERE (((Mid([CEXT],15,2)) Not In (79,88))) " & vbCrLf
    With CreateObject("ADODB.Connection")
        .Open "Provider=Microsoft." & IIf(v <> "8.0", "ACE.OLEDB.12.0", "Jet.OLEDB.4.0") & ";Data Source=" & strPath & ";Extended Properties=Excel " & IIf(v <> "8.0", "12.0", "8.0")
        Application.ScreenUpdating = False
        Sheet5.Range("A2:V65000").ClearContents
        Sheet5.Range("A2").CopyFromRecordset .Execute(strSQL)
        Application.ScreenUpdating = True
    End With
End Sub
Em test code của Anh vẫn bị trùng Anh ơi. vẫn chưa ra kết quả là đúng 33257 dòng đó Anh.
 
Upvote 0
Em test code của Anh vẫn bị trùng Anh ơi. vẫn chưa ra kết quả là đúng 33257 dòng đó Anh.
Do 1 Barcode có thể có hơn 2 SupCod nên bị thế, bạn hãy kiểm tra lại dữ liệu mình đi nhé. Nếu 1 Barcode mà lấy chỉ 1 SupCod đối với tương ứng nhiều SupCod thì tiêu chí nào để loại bỏ những anh kia?

32.png
 
Upvote 0

File đính kèm

Upvote 0
Em test code Anh bắt đầu từ dòng 31219 o cột E Barcode thì bị lỗi không phải dạng text mà là dạng số khoa học đó Anh.

Em cảm ơn Anh Hiếu nhiều!
dữ liệu nhiều quá khó kiểm tra kết quả
chỉnh lại lệnh
Mã:
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), 18).NumberFormat = "@"
trong đoạn code
Mã:
With Sheets("t23")
  LastR = .Range("A" & Rows.Count).End(xlUp).Row
  If LastR > 1 Then
    Darr = .Range("A2:T" & LastR).Value
    LastR = Sheets("t1").Range("B" & Rows.Count).End(xlUp).Row
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), 18).NumberFormat = "@"
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), UBound(Darr, 2)) = Darr
  End If
End With
 
Upvote 0
dữ liệu nhiều quá khó kiểm tra kết quả
chỉnh lại lệnh
Mã:
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), 18).NumberFormat = "@"
trong đoạn code
Mã:
With Sheets("t23")
  LastR = .Range("A" & Rows.Count).End(xlUp).Row
  If LastR > 1 Then
    Darr = .Range("A2:T" & LastR).Value
    LastR = Sheets("t1").Range("B" & Rows.Count).End(xlUp).Row
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), 18).NumberFormat = "@"
    Sheets("t1").Range("A" & LastR + 1).Resize(UBound(Darr), UBound(Darr, 2)) = Darr
  End If
End With
Code ra đúng rồi Anh ơi, giờ mới giải quyết xong bài toán này, Cho em hỏi Anh nghĩ bài toán này có khó lắm không Anh?
Em cảm ơn Anh Hiếu nhiều. Không biết làm gì để báo đáp Anh đây. Anh giúp đỡ em quá nhiệt tình. Từ code của Anh em cũng học hỏi rất nhiều.

Chúc Anh có nhiều sức khỏe để hoàn thành tốt công việc.
Em chúc Anh ngủ ngon.
 
Upvote 0
Web KT

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

Back
Top Bottom