Sử dụng danh sách động tự tạo - Validation List (1 người xem)

Liên hệ QC

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

solomon2211

Thành viên tích cực
Tham gia
25/11/08
Bài viết
1,122
Được thích
4,497
Nghề nghiệp
Tài chính - Kế toán
Chào cả nhà!

Đã lâu lắm rồi không ghé lại diễn đàn. Hôm nay, ghé lại nhờ mọi người giúp đỡ cho vấn đề sau đây (như file đính kèm - Excel 2013 có macro).


Yêu cầu: Nhập dữ liệu vào sheet DO (phiếu giao hàng) với điều kiện:
+ Côt C (Customer): lấy dữ liệu từ sheet Customer
+ Cột E(Factory) chỉ hiển thị các dữ liệu trong sheet Factory thỏa điều kiện cột C
+ Dữ liệu cột F (SO) lấy từ sheet SO với điều kiện thỏa cột C (Customer)
+ Dữ liệu chột H (Item) sẽ lấy từ sheet SO với điều kiện thỏa mãn cột F (SO)

Mình đang dung sự kiện (event) Worksheet SelectionChange để lấy dữ liệu tại dòng nhập liệu ở sheet DO cho việc tạo list. Tuy nhiên, cách này làm cho việc nhập liệu chậm vì mỗi lần thay đổi ở sheet DO excel sẽ refresh.

Vui lòng chia sẽ giải pháp khác.

Cám ơn nhiều.
 

File đính kèm

Chào cả nhà!

Đã lâu lắm rồi không ghé lại diễn đàn. Hôm nay, ghé lại nhờ mọi người giúp đỡ cho vấn đề sau đây (như file đính kèm - Excel 2013 có macro).


Yêu cầu: Nhập dữ liệu vào sheet DO (phiếu giao hàng) với điều kiện:
+ Côt C (Customer): lấy dữ liệu từ sheet Customer
+ Cột E(Factory) chỉ hiển thị các dữ liệu trong sheet Factory thỏa điều kiện cột C
+ Dữ liệu cột F (SO) lấy từ sheet SO với điều kiện thỏa cột C (Customer)
+ Dữ liệu chột H (Item) sẽ lấy từ sheet SO với điều kiện thỏa mãn cột F (SO)

Mình đang dung sự kiện (event) Worksheet SelectionChange để lấy dữ liệu tại dòng nhập liệu ở sheet DO cho việc tạo list. Tuy nhiên, cách này làm cho việc nhập liệu chậm vì mỗi lần thay đổi ở sheet DO excel sẽ refresh.

Vui lòng chia sẽ giải pháp khác.

Cám ơn nhiều.

mấy cái table nhìn cũng hay hén, nhưng tôi ko rành,,,,,,sao file thấy tính lâu quá,,,,,,không biết tại table hay cthức mảng nhiều (sumproduct)

về yêu cầu của bạn, bạn thử code sau
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo thoat
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

Dim fac, so As Variant, soV(), facV(), poV(), i, j, k, l, n As Long, listF, listSO, listPO As String
With Sheet3
    fac = .[a2].Resize(.[a20000].End(3).Row - 1, 6).Value
End With
With Sheet4
    so = .[a2].Resize(.[a20000].End(3).Row - 1, 13).Value
End With

If Not Intersect(Target, [c5:c20000]) Is Nothing Then
    Target.Offset(, 1).Resize(, 17).ClearContents
    Target.Offset(, 1) = Sheet2.[A:A].Find(Target.Value, , , 1).Offset(, 1).Value
    For i = 1 To UBound(fac)
        'nap list factory
        If fac(i, 1) = Target.Value Then
            ReDim Preserve facV(1 To i)
            k = k + 1
            facV(k) = fac(i, 2)
        End If
    Next i
    If k Then
        listF = Join(facV, ",")
        With Target.Offset(, 2).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=listF
        End With
    End If
        'nap list so
    For i = 1 To UBound(so)
        If so(i, 1) = Target.Value Then
            ReDim Preserve soV(1 To i)
            l = l + 1
            soV(l) = so(i, 2)
        End If
    Next i
    If l Then
        listSO = Join(soV, ",")
        With Target.Offset(, 3).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=listSO
        End With
    End If
End If
'nap list cho po
If Not Intersect(Target, [F5:F20000]) Is Nothing Then
For i = 1 To UBound(so)
        If so(i, 2) = Target.Value Then
            ReDim Preserve poV(1 To i)
            n = n + 1
            poV(n) = so(i, 3)
        End If
    Next i
    If n Then
        listPO = Join(poV, ",")
        With Target.Offset(, 1).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=listPO
        End With
    End If
End If
thoat:
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom