Tự Phân Chia dữ liệu khi nhập vào

Liên hệ QC

Gagas

Thành viên mới
Tham gia
1/5/20
Bài viết
16
Được thích
4
Dạ chào mấy anh , file excel gồm 3 bảng:
+ bảng 1 là bảng mặc định tải về từ hệ thống
+ bảng 2 là e tự cập nhật vào
+ bảng 3 là bảng dùng để in ra ... cho bộ phận giao hàng ký nhận
AC giúp e cách nào để khi e nhập dữ liệu ( mã đơn hàng ) vào bảng 2 , thì mã đơn hàng sẽ tự xuât vào bảng 3 đúng với đơn vị vận chuyển , dựa trên số liệu bảng 1 không ạ
E Xin Cảm ơn ạ !
 

File đính kèm

  • Help.png
    Help.png
    78.8 KB · Đọc: 22
  • help.xlsx
    10.2 KB · Đọc: 24
Nếu là tôi thì tôi khoái "Dic" hơn. Có thể cùng 3 For nhưng mỗi For chỉ 1 lần.
Nghĩa là vòng nào đi vòng đấy (3*1) còn hơn 3 vòng lồng nhau (3*3) phải không Thầy?
Vâng chắc là chỉ còn cách đó là tối ưu nhất ạ, vì 3 bảng khác nhâu nên không thể giảm được nữa rồi.
Cảm ơn Thầy đã chỉ dẫn ạ.
 
Upvote 0
Hết giãn cách, nhưng bỏ mảng Bác ạ :D
Bác chỉ giúp con cách giữ lại mảng với T_T

Mã:
Option Explicit

Sub TapCode_PhieuXuat_HetGianCach()
    Dim Bang1(), Bang2(), Bang3(), i As Long, c As Long, j As Long, k As Long
    With ThisWorkbook.Worksheets("Sheet1")
        Bang1 = .Range("A5:F" & 10).Value
        Bang2 = .Range("C18:D23").Value
        Bang3 = .Range("I6:L6").Value
                .Range("I7:L20").Value = Empty
        For c = 1 To UBound(Bang1, 1)
            For i = 1 To UBound(Bang2, 1)
                If Bang2(i, 1) = Bang1(c, 1) Then
                    For j = 1 To 4
                        If Bang3(1, j) = Bang1(c, 6) Then
                             k = .Range("H20").Offset(, j).End(xlUp).Row + 1
                            .Cells(k, 8 + j) = Bang2(i, 1)
                        End If
                    Next j
                End If
            Next i
        Next c
    End With
End Sub
Bạn nên chuyển qua dùng Dic
Mã:
Sub TapCode_PhieuXuat_HetGianCach()
    Dim Bang1(), Bang2(), Bang3(), KQ(), DonHang, VanChuyen
    Dim sRow&, i As Long, c As Long, j As Long, k As Long
    With ThisWorkbook.Worksheets("Sheet1")
        Bang1 = .Range("A5:F" & 10).Value
        Bang2 = .Range("C18:D23").Value
        Bang3 = .Range("I6:L6").Value
        sRow = UBound(Bang2, 1) + 1
        ReDim KQ(1 To sRow, 1 To 4)
        For c = 1 To UBound(Bang2, 1)
            DonHang = Bang2(c, 1)
            For i = 1 To UBound(Bang1, 1)
                If DonHang = Bang1(i, 1) Then
                    For j = 1 To 4
                        If Bang3(1, j) = Bang1(i, 6) Then
                            KQ(sRow, j) = KQ(sRow, j) + 1
                            KQ(KQ(sRow, j), j) = DonHang
                            Exit For
                        End If
                    Next j
                    Exit For
                End If
            Next i
        Next c
        .Range("I7:L20").Value = Empty
        .Range("I7").Resize(sRow - 1, 4).Value = KQ
    End With
End Sub
 
Upvote 0
Bạn nên chuyển qua dùng Dic
Mã:
Sub TapCode_PhieuXuat_HetGianCach()
    Dim Bang1(), Bang2(), Bang3(), KQ(), DonHang, VanChuyen
    Dim sRow&, i As Long, c As Long, j As Long, k As Long
    With ThisWorkbook.Worksheets("Sheet1")
        Bang1 = .Range("A5:F" & 10).Value
        Bang2 = .Range("C18:D23").Value
        Bang3 = .Range("I6:L6").Value
        sRow = UBound(Bang2, 1) + 1
        ReDim KQ(1 To sRow, 1 To 4)
        For c = 1 To UBound(Bang2, 1)
            DonHang = Bang2(c, 1)
            For i = 1 To UBound(Bang1, 1)
                If DonHang = Bang1(i, 1) Then
                    For j = 1 To 4
                        If Bang3(1, j) = Bang1(i, 6) Then
                            KQ(sRow, j) = KQ(sRow, j) + 1
                            KQ(KQ(sRow, j), j) = DonHang
                            Exit For
                        End If
                    Next j
                    Exit For
                End If
            Next i
        Next c
        .Range("I7:L20").Value = Empty
        .Range("I7").Resize(sRow - 1, 4).Value = KQ
    End With
End Sub
Ra là vậy, hay thật mỗi cái if là một cái exit for.
Cảm ơn Bác Hiếu đã chỉ dẫn thêm cho con ạ.
 
Upvote 0
Upvote 0
Hình như ( hình như thôi nhé), với cấu trúc dữ liệu bài số 1 ( dữ liệu in ít thôi), nếu chịu xử dụng 2 hàm của bảng tính thì .....một For là đủ
Thân
Hihi, cảm ơn Bạn "Còn Có Giá"!
Nếu số cột và số dòng như vậy, có lẽ đúng là một for cũng xong ạ, và số if sẽ tăng lên phải không Bạn? :D
 
Upvote 0
Hihi, cảm ơn Bạn "Còn Có Giá"!
Nếu số cột và số dòng như vậy, có lẽ đúng là một for cũng xong ạ, và số if sẽ tăng lên phải không Bạn? :D
Theo đề bài, dữ liệu bảng 1 > dữ liệu bảng 2. Chỉ cần chạy vòng lặp theo bảng 1, dùng Countif xem dữ liệu đó có trong bảng 2 hay không, nếu có, dùng Match để xem dữ liệu ở cột 6 bảng 1 nằm cột thứ mấy trong trong bảng 3 ( bảng kết quả), gán kết quả ( cột 1 bảng 1 vào cột mới tìm được ở bảng 3). Túm lại, 1 For & 1 If ,
Quên nữa, dữ liệu bảng 2 là con dữ liệu bảng 1, nên ta chỉ cần chạy bảng 2 & Match là đủ
 
Lần chỉnh sửa cuối:
Upvote 0
Theo đề bài, dữ liệu bảng 1 > dữ liệu bảng 2. Chỉ cần chạy vòng lặp theo bảng 1, dùng Countif xem dữ liệu đó có trong bảng 2 hay không, nếu có, dùng Match để xem dữ liệu ở cột 6 bảng 1 nằm cột thứ mấy trong trong bảng 3 ( bảng kết quả), gán kết quả ( cột 1 bảng 1 vào cột mới tìm được ở bảng 3). Túm lại, 1 For & 1 If ,
Cảm ơn Bạn nhiều ạ ^_^
Chúc Bạn nhiều sức khỏe !
 
Upvote 0
Ông này có sổ hưu từ lâu rồi đó nha! (Lúc mà thấy Hướng vô Nam được thết thịt chuột ở HTCC!)
 
Upvote 0
Web KT

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

Back
Top Bottom