Giúp em viết code Tính số lượng sản phẩm cần sử dụng theo kế hoạch sản xuất! (1 người xem)

Liên hệ QC

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

nguyen_sammi

Thành viên mới
Tham gia
11/9/12
Bài viết
27
Được thích
0
Hi, các anh chị có thể giúp em viết code cho phần tính số lượng sản phẩm cần sử dụng theo kế hoạch sản xuất được ko ạ?
Lúc trước code cũ của em rất bèo, theo căn bản thôi. Chạy chậm khỏi phải chê ạ.
Nhưng do dữ liệu rất nhiều, nên hi vọng anh chị viết lại dùm em code mới để rút ngắn được thời gian ạ.
Em cám ơn rất rất nhiều.
 

File đính kèm

Cũng muốn làm giúp bạn nhưng đọc chả hiểu gì cả. Nếu bạn dùng công thức thì bạn làm thế nào? Có thể nào cho vào 1 công thức, mọi người có thể dựa vào công thức của bạn để viết code
 
Upvote 0
Cũng muốn làm giúp bạn nhưng đọc chả hiểu gì cả. Nếu bạn dùng công thức thì bạn làm thế nào? Có thể nào cho vào 1 công thức, mọi người có thể dựa vào công thức của bạn để viết code

Công thức thì mông lung quá, ko có công thức chính xác. Nhưng ý nghĩa của nó là: Cột O, sẽ search giá trị Item Code VNM-9040DH chẳng hạn (ô được tô màu vàng). (Search bên sheet CONFIGURATION). Kết quả cho ra bao nhiêu thì nhân với số lượng phải sản xuất total là 201 được tô màu xanh. Em có ví dụ lại trong file đính kèm, anh xem và viết code giúp em nhé.
 

File đính kèm

Upvote 0
Công thức thì mông lung quá, ko có công thức chính xác. Nhưng ý nghĩa của nó là: Cột O, sẽ search giá trị Item Code VNM-9040DH chẳng hạn (ô được tô màu vàng). (Search bên sheet CONFIGURATION). Kết quả cho ra bao nhiêu thì nhân với số lượng phải sản xuất total là 201 được tô màu xanh. Em có ví dụ lại trong file đính kèm, anh xem và viết code giúp em nhé.

Công thức cho cell O10:
Mã:
=IF(COUNTIF(CONFIGURATION!$E$10:$F$662,$J10), VLOOKUP($J10,CONFIGURATION!$E$10:$F$662,2,0)*O$8,0)
Kéo fill xuống
Đoán chắc là vậy!
-------------------------
Chết cha! Mới xem lại sheet CONFIGURATION. Cái gì mà cột nào cũng trùng tùm lum vậy trời? Đã gọi là Material Code mà cũng có vụ trùng sao ta?
 
Lần chỉnh sửa cuối:
Upvote 0
Công thức cho cell O10:
Mã:
=IF(COUNTIF(CONFIGURATION!$E$10:$F$662,$J10), VLOOKUP($J10,CONFIGURATION!$E$10:$F$662,2,0)*O$8,0)
Kéo fill xuống
Đoán chắc là vậy!
-------------------------
Chết cha! Mới xem lại sheet CONFIGURATION. Cái gì mà cột nào cũng trùng tùm lum vậy trời? Đã gọi là Material Code mà cũng có vụ trùng sao ta?


em check kỹ rồi mà, đâu có bị trùng đâu anh. Công thức của anh nó báo #VALUE đó.
 
Upvote 0
Công thức cho cell O10:
Mã:
=IF(COUNTIF(CONFIGURATION!$E$10:$F$662,$J10), VLOOKUP($J10,CONFIGURATION!$E$10:$F$662,2,0)*O$8,0)
Kéo fill xuống
Đoán chắc là vậy!
-------------------------
Chết cha! Mới xem lại sheet CONFIGURATION. Cái gì mà cột nào cũng trùng tùm lum vậy trời? Đã gọi là Material Code mà cũng có vụ trùng sao ta?


ah em hiểu ý anh rồi.
Sheet CONFIGURATION, là tính định mức cho ITEM CODE. 1 Item có thể xài 10 Material này, rồi Item khác có thể xài lại 10 material này nữa, nên Material code bị trùng là đương nhiên mà anh.
Còn bên sheet cần tính (Working space) thì Material Code phải là duy nhất.
 
Upvote 0
Xem code ở bài số 10
 
Lần chỉnh sửa cuối:
Upvote 0
Xài code này xem có được không
PHP:
Sub tong()
Dim dl1(), dl2(), kq(), i, j, x
With Sheets("CONFIGURATION")
   dl1 = .Range(.[c10], .[g65536].End(3))")
   dl1 = .Range(.[c10], .[g65536].End(3))D .Range(.[I10], .[I65536].End(3)).Value
   .[O10:IV65000].ClearContents
   kq = .Range(.[O5], .Cells(.[I65536].End(3).Row, .[O5].End(2).Column)).Value
End With
For i = 1 To UBound(dl1)
   For j = 1 To UBound(dl2)
      For x = 1 To UBound(kq, 2)
         If dl1(i, 2) & dl1(i, 1) = dl2(j, 1) & kq(1, x) Then
            kq(j + 5, x) = dl1(i, 4) * kq(4, x)         
         End If
      Next
   Next
Next
Sheets("WORKING SPACE").[O5].Resize(j + 4, x - 1) = kq
End Sub

Dạ code này chạy đúng rồi anh, em cám ơn anh nhiều ạ.
Nhưng vì dữ liệu thật của em nhiều quá, nên chạy chậm lắm ạ :(
 
Upvote 0
Xài code này xem có được không
PHP:
Sub tong()
Dim dl1(), dl2(), kq(), i, j, x
With Sheets("CONFIGURATION")
   dl1 = .Range(.[c10], .[g65536].End(3))")
   dl1 = .Range(.[c10], .[g65536].End(3))D .Range(.[I10], .[I65536].End(3)).Value
   .[O10:IV65000].ClearContents
   kq = .Range(.[O5], .Cells(.[I65536].End(3).Row, .[O5].End(2).Column)).Value
End With
For i = 1 To UBound(dl1)
   For j = 1 To UBound(dl2)
      For x = 1 To UBound(kq, 2)
         If dl1(i, 2) & dl1(i, 1) = dl2(j, 1) & kq(1, x) Then
            kq(j + 5, x) = dl1(i, 4) * kq(4, x)         
         End If
      Next
   Next
Next
Sheets("WORKING SPACE").[O5].Resize(j + 4, x - 1) = kq
End Sub

ủa hình như anh mới sửa lại code. Nó báo lỗi anh à.
 
Upvote 0
ủa hình như anh mới sửa lại code. Nó báo lỗi anh à.
Chẳng hiểu mạng bị sao ấy
Mã:
Sub tong()
Dim dl1(), dl2(), kq(), i, j, x
With Sheets("CONFIGURATION")
   dl1 = .Range(.[c10], .[g65536].End(3)).Value
End With
With Sheets("WORKING SPACE")
   dl2 = .Range(.[I10], .[I65536].End(3)).Value
   .[O10:IV65000].ClearContents
   kq = .Range(.[O5], .Cells(.[I65536].End(3).Row, .[O5].End(2).Column)).Value
End With
For i = 1 To UBound(dl1)
   For j = 1 To UBound(dl2)
      If dl1(i, 2) = dl2(j, 1) Then
         For x = 1 To UBound(kq, 2)
            If dl1(i, 2) & dl1(i, 1) = dl2(j, 1) & kq(1, x) Then
               kq(j + 5, x) = dl1(i, 4) * kq(4, x)
            End If
         Next
      End If
   Next
Next
Sheets("WORKING SPACE").[O5].Resize(j + 4, x - 1) = kq
End Sub

PS: Code có bổ sung chạy nhanh hơn, 30 000 dòng và 200 cột chạy khoảng 5s
 
Lần chỉnh sửa cuối:
Upvote 0
Chẳng hiểu mạng bị sao ấy
Mã:
Sub tong()
Dim dl1(), dl2(), kq(), i, j, x
With Sheets("CONFIGURATION")
   dl1 = .Range(.[c10], .[g65536].End(3)).Value
End With
With Sheets("WORKING SPACE")
   dl2 = .Range(.[I10], .[I65536].End(3)).Value
   .[O10:IV65000].ClearContents
   kq = .Range(.[O5], .Cells(.[I65536].End(3).Row, .[O5].End(2).Column)).Value
End With
For i = 1 To UBound(dl1)
   For j = 1 To UBound(dl2)
      If dl1(i, 2) = dl2(j, 1) Then
         For x = 1 To UBound(kq, 2)
            If dl1(i, 2) & dl1(i, 1) = dl2(j, 1) & kq(1, x) Then
               kq(j + 5, x) = dl1(i, 4) * kq(4, x)
            End If
         Next
      End If
   Next
Next
Sheets("WORKING SPACE").[O5].Resize(j + 4, x - 1) = kq
End Sub

PS: Code có bổ sung chạy nhanh hơn, 30 000 dòng và 200 cột chạy khoảng 5s


Dạ, chạy nhanh lắm anh, hihi... em cám ơn anh nhiều :)
 
Upvote 0
Mình có cảm giác rằng dữ liệu ở trang "CONFIGURATION" có thể bố trí lại

Tăng số cột lên thì số hàng sẽ giảm đi & giảm cỡ 1/5 số ô sử dụng trên trang tính; (Khi đó thầy NDU khỏi ngạc nhiên vì dữ liệu của bạn như vậy!)
 
Upvote 0
Tăng số cột lên thì số hàng sẽ giảm đi & giảm cỡ 1/5 số ô sử dụng trên trang tính; (Khi đó thầy NDU khỏi ngạc nhiên vì dữ liệu của bạn như vậy!)

Dạ lúc trước CONFIGURATION của em dạng nằm ngang ạ, nhưng số lượng Material nhiều quá hết cột để chèn vào nên giờ mới chuyển lại thành dọc.
 
Upvote 0
Web KT

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

Back
Top Bottom