[VBA] Nhờ kiểm tra giúp mã Lấy dữ liệu sản phẩm từ các Sheet nhãn hàng khác nhau

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

lam hai tuyen

Thành viên mới
Tham gia
2/7/18
Bài viết
3
Được thích
0
Mọi người ơi,

Em đã tạo một đoạn mã VBA xử lý yêu cầu như sau:

Kiểm tra nội dung ô A4 trong sheet hiện tại xem nó có khớp với một trong các sheet Nhãn hàng hay không.
Nếu nội dung của A4 hợp lệ, mã sẽ xác định sheet tương ứng.
Sau đó, mã sẽ tìm các hàng trong vùng A4:K100 của sheet mục tiêu. (bằng hàm index)
Với điều kiện 1: Giá trị tại ô B4 của sheet hiện tại khớp với cột A của sheet mục tiêu.
Điều kiện 2: Giá trị tại ô C2 của sheet hiện tại khớp với dòng 2 (hàng tiêu đề) của sheet mục tiêu.
Nếu tìm thấy dữ liệu khớp, giá trị sẽ được ghi vào ô C4 của sheet hiện tại.
Nếu không tìm thấy, ô C4 sẽ hiển thị "Khong tim thay du lieu khop".
Đoạn mã này sẽ tiếp tục kiểm tra ở ô A5, cho đến ô dữ liệu cuối cùng của cột A.

Em kiểm tra thấy mã đã chạy được tới đoạn "Xác định tên Sheet Nhãn hàng có tồn tại"
Đoạn Index Match thì đang bị lỗi, mà em không biết sai cú pháp gì.

Nhờ Mọi người xem qua giúp em.

Em cám ơn.
 
Lần chỉnh sửa cuối:
Mọi người ơi,

Em đã tạo một đoạn mã VBA xử lý yêu cầu như sau:

Kiểm tra nội dung ô A4 trong sheet hiện tại xem nó có khớp với một trong các sheet Nhãn hàng hay không.
Nếu nội dung của A4 hợp lệ, mã sẽ xác định sheet tương ứng.
Sau đó, mã sẽ tìm các hàng trong vùng A4:K100 của sheet mục tiêu. (bằng hàm index)
Với điều kiện 1: Giá trị tại ô B4 của sheet hiện tại khớp với cột A của sheet mục tiêu.
Điều kiện 2: Giá trị tại ô C2 của sheet hiện tại khớp với dòng 2 (hàng tiêu đề) của sheet mục tiêu.
Nếu tìm thấy dữ liệu khớp, giá trị sẽ được ghi vào ô C4 của sheet hiện tại.
Nếu không tìm thấy, ô C4 sẽ hiển thị "Khong tim thay du lieu khop".
Đoạn mã này sẽ tiếp tục kiểm tra ở ô A5, cho đến ô dữ liệu cuối cùng của cột A.

Em kiểm tra thấy mã đã chạy được tới đoạn "Xác định tên Sheet Nhãn hàng có tồn tại"
Đoạn Index Match thì đang bị lỗi, mà em không biết sai cú pháp gì.

Nhờ Mọi người xem qua giúp em.

Em cám ơn.
Ô C2 tại Sheet1 là chữ "Name" thì không thể dùng để tìm kiếm các mục tiếp theo được, bạn kiểm tra lại đi rồi tính tiếp nhé.
 
Upvote 0
Mình đã chỉnh lại C2 thành "TenHang" cho đồng bộ với các Sheet Nhãn hàng, vẫn chưa ra được kết quả tìm kiếm đúng.
 
Upvote 0
Mình có cách này, bạn tham khảo & nếu ưng ta tiếp tục:
PHP:
Dim Trang As String
Sub TimKiem()
 Dim Rng As Range, sRng As Range, Cls As Range
 Dim Rws As Long, VTr As Byte
 
 TenTrang
 With Sheet1
    For Each Cls In .Range(.[A4], .[A4].End(xlDown))
        VTr = InStr(Trang, Cls.Value)
        If VTr Then
            Cls.Offset(, 2) = Str(VTr)
        Else
            Cls.Offset(, 2) = "Nothing!"
        End If
    Next Cls
 End With
End Sub
Mã:
Sub TenTrang()
 Dim Sh As Worksheet
 
 Trang = Space(0)
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Sheet1" Then
        Trang = Trang & Left(Sh.Name & "00000000", 9) & "#"
    End If
 Next Sh
End Sub
 
Upvote 0
Mình đã chỉnh lại C2 thành "TenHang" cho đồng bộ với các Sheet Nhãn hàng, vẫn chưa ra được kết quả tìm kiếm đúng.
Vẫn chưa ổn, điều kiện của bạn không phù hợp với cấu trúc các Sheets, bạn nên kiểm tra lại từng điều kiện xem có phù hợp với cấu trúc không đã.
 
Upvote 0
Cám ơn gợi ý của hai Anh SA_DQ và Hoàng Tuấn 868. Mình đã chỉnh được đoạn mã ra kết quả mong đợi. ^_^
 
Upvote 0
Mình có cách này, bạn tham khảo & nếu ưng ta tiếp tục:
PHP:
Dim Trang As String
Sub TimKiem()
 Dim Rng As Range, sRng As Range, Cls As Range
 Dim Rws As Long, VTr As Byte
 
 TenTrang
 With Sheet1
    For Each Cls In .Range(.[A4], .[A4].End(xlDown))
        VTr = InStr(Trang, Cls.Value)
        If VTr Then
            Cls.Offset(, 2) = Str(VTr)
        Else
            Cls.Offset(, 2) = "Nothing!"
        End If
    Next Cls
 End With
End Sub
Mã:
Sub TenTrang()
 Dim Sh As Worksheet
 
 Trang = Space(0)
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Sheet1" Then
        Trang = Trang & Left(Sh.Name & "00000000", 9) & "#"
    End If
 Next Sh
End Sub
sao không có file mà chú viết được code hay zị :D
 
Upvote 0
sao không có file mà chú viết được code hay zị :D
/)ành cho ai muốn tham khảo:

Dim Trang As String
PHP:
Sub TimKiem()
 Dim Rng As Range, sRng As Range, Cls As Range, Sh As Worksheet
 Dim Rws As Long, VTr As Byte, VTr0 As Integer
 Dim ShName As String
 
 TenTrang
 With Sheets("GPE")
    For Each Cls In .Range(.[A4], .[A4].End(xlDown))
        VTr = InStr(Trang, Cls.Value)
        If VTr Then
            ShName = Replace(Mid$(Trang, VTr, 9), "0", "")
            Cls.Offset(, 2) = ShName
            Set Sh = ThisWorkbook.Worksheets(ShName)
            Rws = Sh.UsedRange.Rows.Count
            Set Rng = Sh.[A2].Resize(Rws)
            Set sRng = Rng.Find(Cls.Offset(, 1).Value, , xlFormulas, xlWhole)
            If Not sRng Is Nothing Then
                Cls.Offset(, 2).Resize(, 2).Value = sRng.Offset(, 1).Resize(, 2).Value
                Cls.Offset(, 6).Value = sRng.Offset(, 3).Value
            Else
                MsgBox "GPE"
            End If
        Else
            Cls.Offset(, 2) = "Nothing!"
        End If
    Next Cls
 End With
End Sub
Mã:
Sub TenTrang()
 Dim Sh As Worksheet
 
 Trang = Space(0)
 For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "GPE" Then
        Trang = Trang & Left(Sh.Name & "00000000", 9) & "#"
    End If
 Next Sh
End Sub
File có ở bài trên của mình!
 

File đính kèm

  • Download.rar
    73 KB · Đọc: 6
Upvote 0
Web KT

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

Back
Top Bottom