Code VBA lấy vị trí theo điều kiện

Liên hệ QC

Excel_vba2810

Thành viên mới
Tham gia
25/12/20
Bài viết
19
Được thích
2
Dear Anh/ Chị
Nhờ anh chị giúp đỡ em. Thank you.
1663299379090.png
 

File đính kèm

  • GPE.xlsx
    39.8 KB · Đọc: 29
Dear Anh/ Chị
Nhờ anh chị giúp đỡ em. Thank you.
View attachment 281048
Thử code.
Mã:
Sub abc()
    Dim i As Long, j As Long, arr, dic As Object, dk As String, kq, lr As Long, t
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("GPE")
         kq = .Range("J3:O16").Value
         For i = 1 To UBound(kq)
            kq(i, 6) = Empty
             dk = kq(i, 1) & "#" & kq(i, 5) '& "#" & CLng(kq(i, 4))
             If Not dic.exists(dk) Then
                dic.Add dk, i
             Else
               dic.Item(dk) = dic.Item(dk) & "#" & i
             End If
         Next
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         arr = .Range("A3:G" & lr).Value
         For i = 1 To UBound(arr)
             dk = arr(i, 3) & "#" & arr(i, 1) '& "#" & CLng(arr(i, 6))
             If dic.exists(dk) Then
                For Each t In Split(dic.Item(dk), "#")
                    kq(t, 6) = arr(i, 2)
                Next
             End If
        Next i
        .Range("J3:O16").Value = kq
   End With
   Set dic = Nothing
End Sub
 
Upvote 0
Trong ví dụ mẫu của bạn tại sao dữ liệu lấy ở bảng Stock là DM-058-3/2 mà không phải là DM-058-3/1
Dạ, tại vị trí DM-058-3/1 đã có sẵn (dữ liệu có trước) nên phải lấy DM-058-3/2. Thanks Anh.
Bài đã được tự động gộp:

Thử code.
Mã:
Sub abc()
    Dim i As Long, j As Long, arr, dic As Object, dk As String, kq, lr As Long, t
    Set dic = CreateObject("scripting.dictionary")
    With Sheets("GPE")
         kq = .Range("J3:O16").Value
         For i = 1 To UBound(kq)
            kq(i, 6) = Empty
             dk = kq(i, 1) & "#" & kq(i, 5) '& "#" & CLng(kq(i, 4))
             If Not dic.exists(dk) Then
                dic.Add dk, i
             Else
               dic.Item(dk) = dic.Item(dk) & "#" & i
             End If
         Next
         lr = .Range("A" & Rows.Count).End(xlUp).Row
         arr = .Range("A3:G" & lr).Value
         For i = 1 To UBound(arr)
             dk = arr(i, 3) & "#" & arr(i, 1) '& "#" & CLng(arr(i, 6))
             If dic.exists(dk) Then
                For Each t In Split(dic.Item(dk), "#")
                    kq(t, 6) = arr(i, 2)
                Next
             End If
        Next i
        .Range("J3:O16").Value = kq
   End With
   Set dic = Nothing
End Sub
Đầu tiên em xin chân thành cảm ơn anh vì đã viết code giúp em.
Trong code của anh khi em chạy thì còn 1 số hàng chưa tìm được vị trí (Hình bên dưới). Mong anh hướng dẫn thêm. Thanks anh.
1663478470544.png
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, tại vị trí DM-058-3/1 đã có sẵn (dữ liệu có trước) nên phải lấy DM-058-3/2. Thanks Anh.
Ý bạn là lấy giá trị cuối cùng của StorageBin trong bảng Stock tương ứng với Type và Item hay là vì trong cột StorageBin của bảng đơn hàng đã có DM-058-3/1 rồi nên các giá trị tiếp theo phải lấy là DM-058-3/2
 
Lần chỉnh sửa cuối:
Upvote 0
Ý bạn là lấy giá trị cuối cùng của StorageBin trong bảng Stock tương ứng với Type và Item hay là vì trong cột StorageBin của bảng đơn hàng đã có DM-058-3/1 rồi nên các giá trị tiếp theo phải lấy là DM-058-3/2
DM-058-3/1 có rồi nên các giá trị tiếp theo phải lấy là DM-058-3/2 nha bạn. thank you.
 
Upvote 0
Web KT

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

Back
Top Bottom