Không ai giúp em sao? @@
Không ai giúp em sao? @@
Bạn nên nêu mục đích cuối cùng khi bạn muốn kết quả như vậy, có thể mọi người sẽ có giải pháp thay thế.
Chỉ là như này: Tìm ở cột J nếu dữ liệu trùng với cột AA thì sẽ lấy Lot ở cột B tương ứng. Bởi vì mỗi dữ liệu ở cột AA sẽ trùng rất nhiều dữ liệu cột J vì thế sẽ lấy tất cả các Lot tương ứng cột B. Tuy nhiên, Lot ở cột B là số nên e muốn nó được lấy từ Lot lớn nhất đến Lot nhỏ nhất. Và sẽ được điền vào cột AB (LOT lớn nhất), cột AC (LOT lớn 2), cột AD (LOT lớn 3)....đến hết LOT.Gửi bởi arexthena
Ví dụ: Mã: PSQF1030WA-VB ở cột AA thì ở cột J có 4 mã đó. Tương ứng với mã đó là các LOT: 111958, 112773, 113349, 114384. Các LOT này sẽ được điền vào các cột AB, AC, AD, AE, AF..... theo thứ tự lớn đến bé. Ở vì dụ này thì AB: 114384, AC: 113349, AD: 112773, AE: 111958.
P/S: Em đã viết code trong file gửi lên nhưng chỉ chạy dc khoảng 500 mã ở cột AA thôi. Nếu nhiều hơn thì quá lâu ạ. Bác có thể coi qua.
Các LOT này sẽ được điền vào các cột AB, AC, AD, AE, AF..... theo thứ tự lớn đến béGửi bởi phamsuabe
Tôi đang thắc mắc là tại sao các lot phải được trình bày ngang như vậy, kiểu data này sẽ rất khó theo dõi. Nếu chỉ là lấy những lot của partcode có trong cột AA, và có thể trình bày theo hàng dọc, tôi đưa cho bạn ý tưởng là tạo thêm cột phụ cho bảng bên trái, vlookup từ cột AA (xem những giá trị nào của bảng bên trái có trong cột AA, nếu ko có sẽ trả về #N/A). Sau đó pivot table cho bảng bên trái, filter out tất cả các giá trị #N/A đi là xong.
Thân.
Bởi vì e có khoảng 50 file như thế này và dữ liệu ở mỗi file lại được lấy từ 1 nguồn khác. Sau khi sử lý ở đây xong e còn cần cho các cv sau nữa. Và nó biến động theo thời gian. E muốn show tất cả các Lot của nó ra để sử dụng thuận lợi hơn khi làm vlookup or việc khác. Vì thế e mới muốn viết code bên trong để lấy giá trị value chứ ko làm công thứcGửi bởi arexthena
hi vọng là đúng ý bạn
Góp thêm đoạn code
p/s: nếu làm như bạn minhtungph như trên, tôi nghĩ chắc dùng find rồi chép kết quả vào mảng sẻ nhanh hơnMã:Sub TimTrung() Dim BJ, AA As Variant, kq(), i, j, k As Long BJ = [B10].Resize([B600000].End(3).Row - 9, 9).Value AA = [AA10].Resize([AA60000].End(3).Row - 9) For i = UBound(BJ) To 1 Step -1 For j = 1 To UBound(AA) If BJ(i, 9) = AA(j, 1) Then k = k + 1 ReDim Preserve kq(1 To k) kq(k) = BJ(i, 1) Exit For End If Next j Next i If k Then [AB10:XFD10].Clear [AB10].Resize(, k).Value = kq End If End Sub
============================
Dùng dic tốc độ tăng đáng kể
Mã:Sub TimTrung() Dim BJ, AA As Variant, kq(), i, j, k As Long, d As Object BJ = [B10].Resize([B600000].End(3).Row - 9, 9).Value AA = [AA10].Resize([AA60000].End(3).Row - 9) Set d = CreateObject("Scripting.Dictionary") For j = 1 To UBound(AA) If Not d.Exists(AA(j, 1)) Then d.Add AA(j, 1), "" Next j For i = UBound(BJ) To 1 Step -1 If d.Exists(BJ(i, 9)) Then k = k + 1 ReDim Preserve kq(1 To k) kq(k) = BJ(i, 1) End If Next i If k Then [AB10:XFD10].Clear [AB10].Resize(, k).Value = kq End If Set d = Nothing End Sub
</div>Gửi bởi Let'GâuGâu
</div>
</div>
</div>
Cảm ơn bạn minhtungph nhưng cái đó chỉ là show tất cả các LOT ra thôi.
Làm theo bác Let'gaugau là nhanh hơn rất nhiều và em đang hướng theo cách đó. Nhưng có vẻ vẫn chưa đúng. 2 bác đều đang show tất cả các Lot của tất cả các mã ra.
Cái em muốn là tìm Lot ở cột B theo mã ở cột AA ạ. Có nghĩa là không phải show ra 1 dòng như thế. Mà sẽ tìm từng mã có bao nhiêu Lot thì show ra đó.
ko biết nữaGửi bởi phamsuabe
kết quả chạy code ra 6702 mã, trong cột J của bạn có 6717 mã
tôi dùng dictionary, tức là mã nào ở cột J mà có mặt ở cột ÂA thì nó mới lấy, tôi nghĩ là nó ko sai hoặc ko hiểu ý bạn là làm cái gì
Sắp đến đích zùi đó ạ.Gửi bởi Let'GâuGâu
Cột AA có hơn 2000 mã. Mỗi mã ở cột AA sẽ có nhiều LOT ở cột B. Ví dụ: Mã A ở cột AA10 sẽ có 3 Lot thi điền 3 Lot vào AB10, AC10, AD10. Tiếp đến Mã B ở cột AA11 có 4 lot thì điền 4 Lot vào AB11, AC11, AD11,AE11. Cứ thế đến hết 2000 mã ở cột AA ạ. Bác hiểu ý em chứ ạ?
Hay bác inbox cho em cái contact, e nói cho bác dễ hiểu. [IMG]images/smilies/a42.gif[/IMG]