Sao nhiều thành viên khoái làm kiểu như thế này quá?Em chào các thầy cô, anh chị!
Nhờ các thầy cô, anh chị giúp em code lọc dữ liệu kiểu so sánh, lấy dữ liệu nhiều dòng nhập vào 1 dòng theo 2 điều kiện. Cụ thể như file đính kèm. Em cám ơn nhiều!
Dòng khác là dòng có cùng điều kiện tên sản phẩm và mã, những dòng có màu giống nhau trên 2 bang là dữ liệu cần lấy ạSao bạn không link (công thức) từ bảng 2 sang bảng 1 để biết bạn lấy như thế nào. Nhập chết số thế ai hiểu được. (lấy ở dòng khác là dòng nào cũng đc hay sao, thế thì rất nhiều kết quả nhé)
Sao nhiều thành viên khoái làm kiểu như thế này quá?
Bạn nên thay đổi cấu trúc lại để nhập liệu theo chiều dọc thì công việc của bạn sẽ được thuận tiện và nhẹ nhàng hơn, ba cái vụ này tôi cũng đã góp ý cho nhiều thành viên rồi nên không muốn góp ý nữa. Bạn có thể tham khảo 1 File mẫu tại bài 3 của Topic sau (nếu bạn thích kiểu đó thì viết code sau).
https://www.giaiphapexcel.com/diendan/threads/lỌc-dỮ-liỆu-sang-bẢng-tÍnh-khÁc.135344/
Dạ lấy từ trên xuống dưới sao cho đủ dữ lieu (6 cột) thì thôi ạNếu có nhiều dòng cùng mã thì lấy dòng nào.
Tôi chỉ góp ý về cách làm để in phiếu xuất, phiếu nhập và lưu dữ liệu cho tiện, còn thích hay không là tùy bạn, bạn có thể tham khảo File trong bài viết sau để hiểu thêm (bạn có 1000 loại sản phẩm cũng làm được).Dạ, do số sản phẩm và số mã của bên em rất nhiều, nếu theo hàng dọc thì sẽ tạo nhiều cột và rối mắt, lại không thuận tiện cho các công thức sau này. Em cũng đã có 1 code làm theo hàng dọc nhưng chỉ áp dụng cho 1 sản phẩm và 1 mã, nhưng để làm tất cả các sản phẩm thì em đành phải chuyển hàng ngang ạ. Cám ơn bác!
...............................
ạ
Tôi chỉ góp ý về cách làm để in phiếu xuất, phiếu nhập và lưu dữ liệu cho tiện, còn thích hay không là tùy bạn, bạn có thể tham khảo File trong bài viết sau để hiểu thêm (bạn có 1000 loại sản phẩm cũng làm được).
https://www.giaiphapexcel.com/diendan/threads/theo-dõi-và-truy-vấn-đơn-thuốc-nơi-phòng-khám-bệnh.126073/
Cái này là do cách bố trí và nhập liệu từ ban đầu, nếu làm như File mẫu của tôi thì muốn tổng hợp hay muốn xuất danh sách theo kiểu gì cũng được.Dạ, đây là file gốc của em, sheet Data input là phần dữ liệu vào, dữ liệu này có bố cục ban đầu như vậy rồi ạ, sheet Tong hop là phần dữ liệu em muốn lấy. Tại sheet Tong hop, cột A, B là phần code làm theo chiều dọc cho 1 sản phẩm và máy (đã giải quyết được). Bây giờ em phải tổng hợp tất cả các sản phẩm và máy trên 1 bảng (Cột D:E) vì vậy em cần dữ liệu theo chiều ngang (125 dữ liệu như code chiều dọc) để lập công thức cho các cột F, G, H. Nếu chuyển tất cả thành chiều dọc cũng được, nhưng em sẽ phải làm 1 sheet khác chuyển chiều ngang. Thực sự em cũng chưa có cách gì tốt hơn ạ. Cám ơn bác!
Vâng, dù sao em cũng cám ơn bác, do bên em là đơn vị sản xuất, dữ liệu đôi khi phải theo nhà sản xuất cung cấp (do cách mặc định của thiết bị cấp dữ liệu mua của nhà cung cấp) nên không thay đổi được cách nhập ạ. Em đưa lên để bác hiểu cái khó của em thôi. Em cũng không phải người bảo thủ hay cố chấp mà không tiếp nhận cái mới, có điều không thay đổi được nên phải chịuCái này là do cách bố trí và nhập liệu từ ban đầu, nếu làm như File mẫu của tôi thì muốn tổng hợp hay muốn xuất danh sách theo kiểu gì cũng được.
Còn làm như kiểu bạn thì thua, tôi không nghiên cứu ba cái kiểu nhập liệu nhọc nhằn này.
Vì vậy, bạn chờ thành viên khác có giải pháp gì thì cứu giúp.
File bài #1 thì còn hiểu, file bài #8 thì "đơ".Vâng, dù sao em cũng cám ơn bác, do bên em là đơn vị sản xuất, dữ liệu đôi khi phải theo nhà sản xuất cung cấp (do cách mặc định của thiết bị cấp dữ liệu mua của nhà cung cấp) nên không thay đổi được cách nhập ạ. Em đưa lên để bác hiểu cái khó của em thôi. Em cũng không phải người bảo thủ hay cố chấp mà không tiếp nhận cái mới, có điều không thay đổi được nên phải chịu
Public Sub sGPE()
Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Txt As String
sArr = Range("A6", Range("A6").End(xlDown)).Resize(, 6).Value
ReDim dArr(1 To UBound(sArr), 1 To 9)
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(sArr)
Txt = sArr(I, 1) & "#" & sArr(I, 2)
If Not .Exists(Txt) Then
K = K + 1
.Item(Txt) = K
dArr(K, 1) = sArr(I, 1)
dArr(K, 2) = sArr(I, 2)
dArr(K, 9) = 2
End If
For J = 3 To 6
If sArr(I, J) <> Empty Then
R = .Item(Txt)
If dArr(R, 9) < 8 Then
dArr(R, 9) = dArr(R, 9) + 1
dArr(R, dArr(R, 9)) = sArr(I, J)
End If
End If
Next J
Next I
End With
Range("I15").Resize(K, 8) = dArr
Range("I15").Resize(K, 8).Sort Key1:=Range("I15")
End Sub
Dạ, em cám ơn thầy, chúc thầy sức khoẻ!File bài #1 thì còn hiểu, file bài #8 thì "đơ".
Bạn xem code này cho kiểu cấu trúc của bài #1 rồi tùy ý chỉnh sửa:
"Hổng chơi" với bài #8 nhé!PHP:Public Sub sGPE() Dim sArr(), dArr(), I As Long, J As Long, K As Long, R As Long, Txt As String sArr = Range("A6", Range("A6").End(xlDown)).Resize(, 6).Value ReDim dArr(1 To UBound(sArr), 1 To 9) With CreateObject("Scripting.Dictionary") For I = 1 To UBound(sArr) Txt = sArr(I, 1) & "#" & sArr(I, 2) If Not .Exists(Txt) Then K = K + 1 .Item(Txt) = K dArr(K, 1) = sArr(I, 1) dArr(K, 2) = sArr(I, 2) dArr(K, 9) = 2 End If For J = 3 To 6 If sArr(I, J) <> Empty Then R = .Item(Txt) If dArr(R, 9) < 8 Then dArr(R, 9) = dArr(R, 9) + 1 dArr(R, dArr(R, 9)) = sArr(I, J) End If End If Next J Next I End With Range("I15").Resize(K, 8) = dArr Range("I15").Resize(K, 8).Sort Key1:=Range("I15") End Sub
Code chạy ra kết quả đến 286.397 dòng nên mất 3 phút (chậm quá).Dạ, đây là file gốc của em, sheet Data input là phần dữ liệu vào, dữ liệu này có bố cục ban đầu như vậy rồi ạ, sheet Tong hop là phần dữ liệu em muốn lấy. Tại sheet Tong hop, cột A, B là phần code làm theo chiều dọc cho 1 sản phẩm và máy (đã giải quyết được). Bây giờ em phải tổng hợp tất cả các sản phẩm và máy trên 1 bảng (Cột D:E) vì vậy em cần dữ liệu theo chiều ngang (125 dữ liệu như code chiều dọc) để lập công thức cho các cột F, G, H. Nếu chuyển tất cả thành chiều dọc cũng được, nhưng em sẽ phải làm 1 sheet khác chuyển chiều ngang. Thực sự em cũng chưa có cách gì tốt hơn ạ. Cám ơn bác!
Dạ, em cám ơn! Em dùng code của thầy Ba Tê thấy ổn rồi bácCode chạy ra kết quả đến 286.397 dòng nên mất 3 phút (chậm quá).
Đây là kết quả dòng 6 và 7 và 2 dòng cuối cùng của sheet Data input (File bài 8) phải như thế này không? Bạn kiểm tra lại thử.
View attachment 197199
View attachment 197200