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

  • Thread starter Thread starter huypham
  • Ngày gửi Ngày gửi
Liên hệ QC
Từ chiều về đề tài này thấy sum tụ nhất, học được cái mới, tuy không cần nó mình vẫn làm được việc, nhưng cảm thấy rất vui, kiến thức mà chia sẽ thì sẽ thu vô được rất rất nhiều cái mới
 
Vì chưa xác định chiều dài của mảng một chiều nên tôi lấy chiều dài dài nhất, và khi dùng hàm join nó sẽ thêm nhiều dấu ,,, nên cần xử lý những chuỗi ,, lại

cái này lúc trước nạp list cho validation cũng bị, được sự phụ NDU chỉ cho dùng
redim preverse, mảng một chiều mà, cứ dài tới đâu thì nối nó đến đó............hihihiih
 
cái này lúc trước nạp list cho validation cũng bị, được sự phụ NDU chỉ cho dùng
redim preverse, mảng một chiều mà, cứ dài tới đâu thì nối nó đến đó............hihihiih
Uhm ha, sao mình lại không nhớ ra cái dụ preverse này ta(-.-)
 
Công nhân đề tài này xôm tụ thiệt.

Vẫn vụ tạo data validation
Nhưng bây giờ làm cho cell B1, (file của chủ topic), làm sao để đưa vào format dd/mm/yyyy trong code luôn.
Lấy cột A2 trở đi làm dữ liệu nguồn. Và khi code thì format như nào để được dạng Source: 23/06/2015,26/06/2015,29/06/2015

Thử code mà toàn nó đưa vào list là Value của dạng ngày .......hixxhixx
Ý 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 Arr(), i As Long
Arr = Range("A2", [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
    For i = 1 To UBound(Arr)
        .Item(Arr(i, 1)) = ""
        '.Item(Arr(i, 1)) = .Count
    Next
    Range("G2").Validation.Delete
    Range("G2").Validation.Add 3, , , Join(.keys, ",")
End With
End Sub
Bạn có thể tham khảo thêm ở link sau
http://www.giaiphapexcel.com/forum/...ng-Data-Validation-settings-list-Source/page3

http://www.giaiphapexcel.com/forum/showthread.php?84205-Hỏi-về-Data-Validation/page3
 
Lần chỉnh sửa cuối:
Ý 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
Bạn có thể tham khảo thêm ở link sau
http://www.giaiphapexcel.com/forum/...ng-Data-Validation-settings-list-Source/page3

http://www.giaiphapexcel.com/forum/showthread.php?84205-Hỏi-về-Data-Validation/page3
Cách mọi người đang làm hình như sẽ thỉnh thoảng bị lỗi khi đóng file rồi mở file lên.
Trước đây mình từng bị nên sau này không dùng Validation nữa.
Dùng cách khác cũng cho ra kết quả tương tự nhưng code có thể ngắn hơn nhiều. Cứ thử nghiên cứu thêm cách khác nha.
Chứ xem đoạn code ngắn tí tẹo của mình thì mất hứng suy nghĩ.
 
Tặng cho thớt này một kiểu nữa nè tha hồ mà lựa....Tui nhớ trước đây có thành viên dị ứng với Dic To Dic Thon keo tui ko biết Dic giờ tui viết các kiểu cho mà coi.. nha--=0--=0--=0
PHP:
Public Sub Date_Validation()
    Dim dl(), i As Long
    dl = Range([A2], [A65536].End(3)).Value
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(dl)
            If Not .Exists(dl(i, 1)) Then .Item(dl(i, 1)) = .Count
        Next
        [G2].Validation.Delete
        [G2].Validation.Add 3, , , Join(.keys, ",")
    End With
End Sub
 
Tặng cho thớt này một kiểu nữa nè tha hồ mà lựa....Tui nhớ trước đây có thành viên dị ứng với Dic To Dic Thon keo tui ko biết Dic giờ tui viết các kiểu cho mà coi.. nha--=0--=0--=0
PHP:
Public Sub Date_Validation()
    Dim dl(), i As Long
    dl = Range([A2], [A65536].End(3)).Value
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(dl)
            If Not .Exists(dl(i, 1)) Then .Item(dl(i, 1)) = .Count
        Next
        [G2].Validation.Delete
        [G2].Validation.Add 3, , , Join(.keys, ",")
    End With
End Sub

Thử sửa dòng này

If Not .Exists(dl(i, 1)) Then .Item(dl(i, 1)) = .Count

Thành dòng này xem coi có chết ai không. Viết chi dài lê thê vậy?

.Item(dl(i, 1)) = ""
 
Cách mọi người đang làm hình như sẽ thỉnh thoảng bị lỗi khi đóng file rồi mở file lên.
Trước đây mình từng bị nên sau này không dùng Validation nữa.
Dùng cách khác cũng cho ra kết quả tương tự nhưng code có thể ngắn hơn nhiều. Cứ thử nghiên cứu thêm cách khác nha.
Chứ xem đoạn code ngắn tí tẹo của mình thì mất hứng suy nghĩ.
Em thấy chạy tốt mà có lỗi gì đâu
 
Cách mọi người đang làm hình như sẽ thỉnh thoảng bị lỗi khi đóng file rồi mở file lên.
Trước đây mình từng bị nên sau này không dùng Validation nữa.
Dùng cách khác cũng cho ra kết quả tương tự nhưng code có thể ngắn hơn nhiều. Cứ thử nghiên cứu thêm cách khác nha.
Chứ xem đoạn code ngắn tí tẹo của mình thì mất hứng suy nghĩ.
cái này em nhớ có bị vài lần "Data may have been lost" thì phải . nhưng hình như chỉ có file .xls mới bị . các file sau 2003 không bị nữa
nhưng nếu không phải validata thì ở dạng gì khác nữa vậy anh ?
 
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ì
 
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
 
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

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

Back
Top Bottom