Lấy vị trí cho đơn hàng bằng phương pháp mãng hoặc dictionary

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
Mô Tả:
Nhờ anh/chị giúp em viết code lấy các vị trí ở Bảng "Stock" theo điều kiện như Sau:
1. Vị trí Bin chỉ chứa được 1 code duy nhất.
VD: Trong Bảng "Đơn Hàng" ta có code 75041546 chỉ có 1 dòng thì lấy Bin DM-056-2 có 2 vị trí chứa là DM-056-2/1 và DM-056-2/2 lấy vị trí nào cũng được.
2. Cột Code trong Bảng "Stock" phải rỗng.
Thank you.
1669135044700.png

1669135092090.png
 

File đính kèm

  • GPE.xlsx
    19.1 KB · Đọc: 23
Mô Tả:
Nhờ anh/chị giúp em viết code lấy các vị trí ở Bảng "Stock" theo điều kiện như Sau:
1. Vị trí Bin chỉ chứa được 1 code duy nhất.
VD: Trong Bảng "Đơn Hàng" ta có code 75041546 chỉ có 1 dòng thì lấy Bin DM-056-2 có 2 vị trí chứa là DM-056-2/1 và DM-056-2/2 lấy vị trí nào cũng được.
2. Cột Code trong Bảng "Stock" phải rỗng.
Thank you.
Kiểm tra lại các điều kiện chạy code
_ Bảng stock được sort theo cột vị trí
_ Code xét thêm điều kiện Type
Mã:
Option Explicit
Sub XYZ()
  Dim aST(), aDH(), res()
  Dim srST&, srDH&, fR&, id&, i&, r&, eRow&
  Dim sType$, sCode&, sBin$
 
  aST = Range("A3", Range("G1000000").End(xlUp)).Value
  aDH = Range("I3", Range("L" & Range("I3").End(xlDown).Row + 1)).Value
  srST = UBound(aST): srDH = UBound(aDH) - 1
  ReDim res(1 To srDH, 1 To 1)
  fR = 1
  For i = 1 To srDH
    If sCode <> aDH(i, 1) Then
      sCode = aDH(i, 1)
      sType = aDH(i, 4)
      id = i
      eRow = id
    Else
      eRow = eRow + 1
    End If
    If aDH(i, 1) <> aDH(i + 1, 1) Then
      For r = fR To srST
        If aST(r, 1) = sType And aST(r, 3) = Empty Then
          If sBin <> aST(r, 7) Then
            res(id, 1) = aST(r, 2)
            If id = eRow Then
              fR = r + 1
              sBin = aST(r, 7)
              Exit For
            End If
            id = id + 1
          End If
        End If
      Next r
    End If
  Next i
  Range("M3").Resize(srDH) = res
End Sub
 
Upvote 0
Đã ghi nhận tất cả bài viết, và trả lại đáp án của anh HieuCD
 
Upvote 0
Kiểm tra lại các điều kiện chạy code
_ Bảng stock được sort theo cột vị trí
_ Code xét thêm điều kiện Type
Mã:
Option Explicit
Sub XYZ()
  Dim aST(), aDH(), res()
  Dim srST&, srDH&, fR&, id&, i&, r&, eRow&
  Dim sType$, sCode&, sBin$
 
  aST = Range("A3", Range("G1000000").End(xlUp)).Value
  aDH = Range("I3", Range("L" & Range("I3").End(xlDown).Row + 1)).Value
  srST = UBound(aST): srDH = UBound(aDH) - 1
  ReDim res(1 To srDH, 1 To 1)
  fR = 1
  For i = 1 To srDH
    If sCode <> aDH(i, 1) Then
      sCode = aDH(i, 1)
      sType = aDH(i, 4)
      id = i
      eRow = id
    Else
      eRow = eRow + 1
    End If
    If aDH(i, 1) <> aDH(i + 1, 1) Then
      For r = fR To srST
        If aST(r, 1) = sType And aST(r, 3) = Empty Then
          If sBin <> aST(r, 7) Then
            res(id, 1) = aST(r, 2)
            If id = eRow Then
              fR = r + 1
              sBin = aST(r, 7)
              Exit For
            End If
            id = id + 1
          End If
        End If
      Next r
    End If
  Next i
  Range("M3").Resize(srDH) = res
End Sub
Dear Anh HieuCD
Em cảm ơn anh vì đã giúp đỡ em. Bài viết rất đúng với yêu cầu.
Thanks Anh.
 
Upvote 0
Kiểm tra lại các điều kiện chạy code
_ Bảng stock được sort theo cột vị trí
_ Code xét thêm điều kiện Type
Mã:
Option Explicit
Sub XYZ()
  Dim aST(), aDH(), res()
  Dim srST&, srDH&, fR&, id&, i&, r&, eRow&
  Dim sType$, sCode&, sBin$
 
  aST = Range("A3", Range("G1000000").End(xlUp)).Value
  aDH = Range("I3", Range("L" & Range("I3").End(xlDown).Row + 1)).Value
  srST = UBound(aST): srDH = UBound(aDH) - 1
  ReDim res(1 To srDH, 1 To 1)
  fR = 1
  For i = 1 To srDH
    If sCode <> aDH(i, 1) Then
      sCode = aDH(i, 1)
      sType = aDH(i, 4)
      id = i
      eRow = id
    Else
      eRow = eRow + 1
    End If
    If aDH(i, 1) <> aDH(i + 1, 1) Then
      For r = fR To srST
        If aST(r, 1) = sType And aST(r, 3) = Empty Then
          If sBin <> aST(r, 7) Then
            res(id, 1) = aST(r, 2)
            If id = eRow Then
              fR = r + 1
              sBin = aST(r, 7)
              Exit For
            End If
            id = id + 1
          End If
        End If
      Next r
    End If
  Next i
  Range("M3").Resize(srDH) = res
End Sub
Dear Anh Hieu @HieuCD
Đoạn code trên em muốn nâng cấp thêm như hình bên dưới:
-Vị trí trong Stock có mã hàng sẵn thì phải làm sao vậy anh? Nhờ anh hướng dẫn giúp em. Thanks Anh.
1676688654043.png
 

File đính kèm

  • GPE STOCK CO VI TRI SAN.xlsm
    18.5 KB · Đọc: 4
Upvote 0
Làm sao nhận diện được dòng có "Stock có sẵn"
Dạ, những dòng stock có sẵn là những dòng đó có mã code và số lượng.
Những dòng mà code và số lượng trống --> những dòng đó cần đưa đơn hàng vào vị trí theo điều kiện là 1 Bin có 2 dòng nhưng chỉ chứa cùng 1 mã hàng. Em cũng đã suy nghĩ mấy tháng nay rồi nhưng không ra kết quả. Nhờ anh giúp đỡ em. Chân thành cảm ơn anh.
Thanks anh.
Bài đã được tự động gộp:

Làm sao nhận diện được dòng có "Stock có sẵn"
Stock ban đầu như hình bên dưới anh nha.
Sau khi em tìm được vị trí thỏa mãn điều kiện rồi mới lưu vào trong Stock.
Thanks Anh.
1676693843949.png
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, những dòng stock có sẵn là những dòng đó có mã code và số lượng.
Những dòng mà code và số lượng trống --> những dòng đó cần đưa đơn hàng vào vị trí theo điều kiện là 1 Bin có 2 dòng nhưng chỉ chứa cùng 1 mã hàng. Em cũng đã suy nghĩ mấy tháng nay rồi nhưng không ra kết quả. Nhờ anh giúp đỡ em. Chân thành cảm ơn anh.
Thanks anh.
Bài đã được tự động gộp:


Stock ban đầu như hình bên dưới anh nha.
Sau khi em tìm được vị trí thỏa mãn điều kiện rồi mới lưu vào trong Stock.
Thanks Anh.
View attachment 286648
Bạn gởi lại file với 2 sheet: sheet dữ liệu ban đầu và sheet kết quả mong muốn
 
Upvote 0
Dạ, những dòng stock có sẵn là những dòng đó có mã code và số lượng.
Những dòng mà code và số lượng trống --> những dòng đó cần đưa đơn hàng vào vị trí theo điều kiện là 1 Bin có 2 dòng nhưng chỉ chứa cùng 1 mã hàng. Em cũng đã suy nghĩ mấy tháng nay rồi nhưng không ra kết quả. Nhờ anh giúp đỡ em. Chân thành cảm ơn anh.
Thanks anh.
Bài đã được tự động gộp:


Stock ban đầu như hình bên dưới anh nha.
Sau khi em tìm được vị trí thỏa mãn điều kiện rồi mới lưu vào trong Stock.
Thanks Anh.
View attachment 286648
Vẫn là code trước, chỉ thay đổi cột dữ liệu và kết quả
 

File đính kèm

  • GPE STOCK CO VI TRI SAN.xlsm
    24.3 KB · Đọc: 17
Upvote 0
Vẫn là code trước, chỉ thay đổi cột dữ liệu và kết quả
Dạ, đúng rồi đó anh.
- Code anh viết giúp em lúc đầu thì Bảng dữ liệu Stock không có các mã hàng và số lượng sẵn.
---> Code rất đúng với yêu cầu.
- Nhưng giờ em muốn nâng cấp lên là Bảng dữ liệu Stock có mã hàng và số lượng sẵn thì code anh viết giúp em không áp dụng được.
---> Nên nhờ anh hướng dẫn thêm.
Thanks Anh
 
Upvote 0
Dạ, đúng rồi đó anh.
- Code anh viết giúp em lúc đầu thì Bảng dữ liệu Stock không có các mã hàng và số lượng sẵn.
---> Code rất đúng với yêu cầu.
- Nhưng giờ em muốn nâng cấp lên là Bảng dữ liệu Stock có mã hàng và số lượng sẵn thì code anh viết giúp em không áp dụng được.
---> Nên nhờ anh hướng dẫn thêm.
Thanks Anh
"Bảng dữ liệu Stock có mã hàng và số lượng sẵn" Cụ thể dữ liệu ban đầu là gì? và kết quả như thế nào?
 
Upvote 0
"Bảng dữ liệu Stock có mã hàng và số lượng sẵn" Cụ thể dữ liệu ban đầu là gì? và kết quả như thế nào?
Dạ, Bảng dữ liệu Stock có mã hàng và số lượng sẵn là như hình bên dưới anh nha.
Anh thấy có 3 dòng đã có mã code và số lượng sẵn.
==>Vấn đề là từ bảng Đơn Hàng em tìm các vị trí thỏa mãn điều kiện anh nha.
VD: Bảng dữ liệu Đơn Hàng em có Code 75041546 Số lượng 1920 (1 dòng) thì sẽ tìm vị trí trong Bảng Stock theo điều kiện sau:
- vị trí đưa đơn hàng phải rỗng.
- Bin DM-056-2 chỉ chứa được 1 code (như vd là code 75041546)
==> như vậy nhìn vào bảng Stock ta thấy chỉ có dòng DM-056-2/2 thỏa mãn điều kiện nên vị trí này ta lấy.
Note: Các code tiếp theo trong bảng đơn hàng cũng làm tương tự.

1676701570068.png

1676703153464.png
 

File đính kèm

  • 1676702087261.png
    1676702087261.png
    27.7 KB · Đọc: 3
Upvote 0
Dạ, Bảng dữ liệu Stock có mã hàng và số lượng sẵn là như hình bên dưới anh nha.
Anh thấy có 3 dòng đã có mã code và số lượng sẵn.
==>Vấn đề là từ bảng Đơn Hàng em tìm các vị trí thỏa mãn điều kiện anh nha.
VD: Bảng dữ liệu Đơn Hàng em có Code 75041546 Số lượng 1920 (1 dòng) thì sẽ tìm vị trí trong Bảng Stock theo điều kiện sau:
- vị trí đưa đơn hàng phải rỗng.
- Bin DM-056-2 chỉ chứa được 1 code (như vd là code 75041546)
==> như vậy nhìn vào bảng Stock ta thấy chỉ có dòng DM-056-2/2 thỏa mãn điều kiện nên vị trí này ta lấy.
Note: Các code tiếp theo trong bảng đơn hàng cũng làm tương tự.

View attachment 286651

View attachment 286653
Vậy file mình mới gởi không thỏa điều kiện gì? dòng kết quả nào không đúng?
 
Upvote 0
Web KT

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

Back
Top Bottom