[Giúp sửa code] Lọc theo điều kiện & tạo Name của mảng lọc (1 người xem)

Liên hệ QC

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

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,063
Được thích
175
Các bạn giúp mình sửa code sau

I/ Mô tả:
Tôi muốn lọc cột B (Mã HH) dựa vào cột A (STT) như sau:
Nếu cột A khác trống & là số thì lấy cột B tương ứng
Kết quả lọc là 1 cột có Mã HH liên tục với nhau
Sau khi lọc thì tạo thành 1 Name có tên là MaHH

II/ Code tôi viết như sau
Mã:
Sub GPE()
    Dim sArr(), dArr(1 To 1000, 1 To 1), I As Long, K As Long
    With Sheets("NXT")
        sArr = .Range("A9", .Range("b65536").End(xlUp)).Resize(, 2).Value
        For I = 1 To UBound(sArr)
            If sArr(I, 1) <> "" And IsNumeric(sArr(I, 1)) Then
                dArr(I, 1) = sArr(I, 2)
            End If
        Next I
        .Range("G9").Resize(I).ClearContents
        .Range("G9").Resize(I - 1) = dArr
    End With
End Sub

Sau khi chạy code thì kết quả như ở cột G ( bị xen kẻ những cell rỗng)
Tôi muốn kết quả như cột I

III/ Các bạn giúp tôi sửa code trên
Vì tôi đang học thêm về mảng, nên các bạn viết về mảng
Trong code còn nhiều chỗ sai, nhờ các bạn phân tích giùm
Phần kết qủa tôi không muốn thể hiện trên cột G nữa mà đưa thẳng vào Name (tên Name là MaHH), vì mục đích của tôi là tạo Validation
Xin cảm ơn!
 

File đính kèm

Thứ nhất, câu lệnh
Mã:
 sArr = .Range("A9", .Range("b65536").End(xlUp)).Resize(, 2).Value
Nên sửa lại cho dễ hiểu là:
PHP:
 sArr = .Range(.Range("A9"), .Range("b65536").End(xlUp)).Value
Hay vầy cũng được nà:
PHP:
 sArr() = .Range("A9:A" & .Range("B65535").End(xlUp).Row).Resize(, 2)
Một khi điều kiện
Mã:
 If sArr(I, 1) <> "" And IsNumeric(sArr(I, 1)) Then
thỏa, bạn cần tăng biến đếm K lên 1
& chỉ sau đó mới ghi dữ liệu mã HH vô mảng, như
PHP:
 dArr(K, 1)=Arr(I, 2)

Còn chuyện gán tên, thì có thể bạn gán trước vùng nào đó có tên; & sau đó nạp dữ liệu thu được từ macro than thương của bân lên vùng đó.
Tất nhiên gán vùng tên bằng macro cũng song; nhưng . . . .
 
Upvote 0
Còn chuyện gán tên, thì có thể bạn gán trước vùng nào đó có tên; & sau đó nạp dữ liệu thu được từ macro than thương của bân lên vùng đó.
Tất nhiên gán vùng tên bằng macro cũng song; nhưng . . . .
Em cảm ơn nhiều
Về tạo name thì em tạo như sau:
Mã:
Sub GPE_2()
    Dim sArr(), dArr(1 To 1000, 1 To 1), I As Long, K As Long
    Dim EndR
    With Sheets("NXT")
        sArr = .Range("A9", .Range("b65536").End(xlUp)).Value
        For I = 1 To UBound(sArr)
            If sArr(I, 1) <> "" And IsNumeric(sArr(I, 1)) Then
                K = K + 1
                dArr(K, 1) = sArr(I, 2)
            End If
        Next I
        .Range("Z1").Resize(I).ClearContents
        .Range("Z1").Resize(I - 1) = dArr


    End With
    ThisWorkbook.Names("MaHH").Delete
    EndR = [z65000].End(xlUp).Row
    Range("z1").Resize(EndR).Name = "MaHH"
End Sub
Tuy nhiên em muốn tạo thẳng luôn mà không cần qua trung gian cột Z, thì code fải sửa như thế nào?
 
Upvote 0
Bạn bỏ các dòng này
Mã:
[COLOR=#000000]EndR = [z65000].End(xlUp).Row[/COLOR]    Range("z1").Resize(EndR).Name = "MaHH"
Rồi thêm
Mã:
Names.Add Name:="MaHH", RefersTo:=dArr
Tôi bấm F3 thì có hiện tên Name MaHH, nhưng Name này không thể đưa vào Validation để làm List được, làm sao khắc phục vậy bạn?
Xin cảm ơn
 
Upvote 0
Web KT

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

Back
Top Bottom