Lọc mảng nhiều điều kiện

Liên hệ QC
Ý BẠN LÀ đưa ngày vào Validation phải ko nếu vậy thì code sau
mình mới đổi lại kiểu With CreateObject("scripting.dictionary")
PHP:
Public Sub Dic_Validation()
    Dim dl(), i As Long
    dl = Range([A2], [A65536].End(3)).Value
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(dl)
            If dl(i, 1) <> "" Then
                If Not .Exists(dl(i, 1)) Then .Add dl(i, 1), ""
            End If
        Next 
       [G2].Validation.Delete
       [G2].Validation.Add 3, , , Join(.keys, ",")
    End With
End Sub

Oh.
1. Trường hợp đầu khi Dim Dic As Object, rồi Set Dic = ..... : như vậy nó làm cho dữ liệu ngày thành Value
2. Trường hợp code ở Quote bên trên: With CreateObject("scripting.dictionary"). Mà không cần Dim hay Set thì định dạng ngày nó lại không thay đổi.

Lý do tại sao như vậy nhỉ? Mong bác giải thích giúp!-0-/.
 
Oh.
1. Trường hợp đầu khi Dim Dic As Object, rồi Set Dic = ..... : như vậy nó làm cho dữ liệu ngày thành Value
2. Trường hợp code ở Quote bên trên: With CreateObject("scripting.dictionary"). Mà không cần Dim hay Set thì định dạng ngày nó lại không thay đổi.

Lý do tại sao như vậy nhỉ? Mong bác giải thích giúp!-0-/.
bạn cho tôi trường hợp bạn gặp phải đi? vì tôi thấy không có sự khác biệt nào?
khai báo Dim rồi Set thì sẽ tường minh hơn (trong trường hợp sử dụng nhiều nơi)
còn sử dụng ít thì có thể tạo trực tiếp Create...., còn về dữ liệu thì nó như nhau không có khác biệt gì
 
bạn cho tôi trường hợp bạn gặp phải đi? vì tôi thấy không có sự khác biệt nào?
khai báo Dim rồi Set thì sẽ tường minh hơn (trong trường hợp sử dụng nhiều nơi)
còn sử dụng ít thì có thể tạo trực tiếp Create...., còn về dữ liệu thì nó như nhau không có khác biệt gì

Oh. Mới test lại code DIC, đúng thật là nó ra dạng ngày luôn. không hiểu sao hồi lúc test nó lại ra value mới ghê.hixhix........
Nếu không dùng DIC (mấy code không phải DIC ở topic này) nếu áp dụng ngày thì có để nguyên định dạng đưa vào Validation không anh? nếu được anh làm thử cho cái tham khảo nha!
 
Oh. Mới test lại code DIC, đúng thật là nó ra dạng ngày luôn. không hiểu sao hồi lúc test nó lại ra value mới ghê.hixhix........
Nếu không dùng DIC (mấy code không phải DIC ở topic này) nếu áp dụng ngày thì có để nguyên định dạng đưa vào Validation không anh? nếu được anh làm thử cho cái tham khảo nha!
Không sử dụng DIC
Mã:
Sub GPE()
    Dim Rng As Range
    Dim ArrD()
    Dim ArrN()
    Dim DongCuoi As Long
    Dim i As Long, j As Long
    Dim DongHienTai As Long
    DongCuoi = Sheet1.Range("A60000").End(xlUp).Row
    ArrN = Sheet1.Range("A2:A" & DongCuoi)
     ReDim ArrD(1)
     ArrD(1) = ArrN(1, 1)
     DongHienTai = 1
     flag = True
    For i = 1 To UBound(ArrN, 1)
        For j = 1 To DongHienTai
             If (ArrN(i, 1) = ArrD(j)) Then
               flag = False
               Exit For
             End If
        Next j
            If (flag = True) Then
                DongHienTai = DongHienTai + 1
                 ReDim Preserve ArrD(DongHienTai)
                ArrD(DongHienTai) = ArrN(i, 1)
            End If
            flag = True
     Next
     Range("G3").Validation.Delete
     Range("G3").Validation.Add xlValidateList, , , Join(ArrD, ",")
End Sub
 
Quan trọng là cái chỗ mình đặt nó đang định dạng là kiểu gì thôi mà?

Giờ đã hiểu lý do. Do dùng vùng tạm để gán dữ liệu đang định dạng là General .......(mà không để ý) nên khi nối lại khi code & đưa vào source.....nó ra value luôn! hixxhixx
 
Không sử dụng DIC
Mã:
Sub GPE()
    Dim Rng As Range
    Dim ArrD()
    Dim ArrN()
    Dim DongCuoi As Long
    Dim i As Long, j As Long
    Dim DongHienTai As Long
    DongCuoi = Sheet1.Range("A60000").End(xlUp).Row
    ArrN = Sheet1.Range("A2:A" & DongCuoi)
     ReDim ArrD(1)
     ArrD(1) = ArrN(1, 1)
     DongHienTai = 1
     flag = True
    For i = 1 To UBound(ArrN, 1)
        For j = 1 To DongHienTai
             If (ArrN(i, 1) = ArrD(j)) Then
               flag = False
               Exit For
             End If
        Next j
            If (flag = True) Then
                DongHienTai = DongHienTai + 1
                 ReDim Preserve ArrD(DongHienTai)
                ArrD(DongHienTai) = ArrN(i, 1)
            End If
            flag = True
     Next
     Range("G3").Validation.Delete
     Range("G3").Validation.Add xlValidateList, , , Join(ArrD, ",")
End Sub
tuyệt vời.nhưng dữ liệu thêm vào được cập nhật tự động thì hay quá
 
Web KT
Back
Top Bottom