Trích lọc dữ liệu theo điều kiện của các mã công việc cho trước

Liên hệ QC

Dauthivan

Thành viên tiêu biểu
Tham gia
15/8/08
Bài viết
565
Được thích
327
Đầu bài của em như sau:

Daubailoc.jpg


Nhờ các bác giúp hộ bài toán lọc: Giả thiết là Em cần lọc các dòng mà cột A là các số 913, 411, 5000 từ Sheet 1 sang Sheet 2; sau đó là sắp xếp các dòng của Sheet kết quả thu được theo thứ tự cột A lần lượt là 913, 411, 5000 .

Hình ảnh kết quả của bài toán:
Ketqualoc.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Đầu bài của em như sau: Nhờ các bác giúp hộ bài toán lọc: Giả thiết là Em cần lọc các dòng mà cột A là các số 913, 411, 5000 từ Sheet 1 sang Sheet 2; sau đó là sắp xếp các dòng của Sheet kết quả thu được theo thứ tự cột A lần lượt là 913, 411, 5000 . Hình ảnh kết quả của bài toán:
Advanced Filter là được rồi

Capture.JPG

Muốn code thì cứ record macro quá trình này
 
Upvote 0
Còn dùng mảng thì thử dùng cái nì xem có được không, nhưng sắp xếp như bạn thì nó ngu, bởi không có trật tự nào cả!

Mã:
Private Sub LocDieuKien()
    On Error Resume Next
    Dim MyArr1, MyArr2, i As Long, MyRow As Long, MyTmp
    Sheet2.[A6:B30].ClearContents
    MyArr1 = Range(Sheet1.[A4], Sheet1.[A65536].End(xlUp)).Resize(, 2).Value
    ReDim MyArr2(1 To UBound(MyArr1, 1), 1 To 2)
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(MyArr1, 1)
            If MyArr1(i, 1) <> vbNullString Then
                If MyArr1(i, 1) = 913 Or MyArr1(i, 1) = 411 Or MyArr1(i, 1) = 5000 Then
                    MyTmp = MyArr1(i, 1)
                    If Not .Exists(MyTmp) Then
                        MyRow = MyRow + 1
                        .Add MyTmp, MyRow
                        MyArr2(MyRow, 1) = MyTmp
                        MyArr2(MyRow, 2) = MyArr1(i, 2)
                    End If
                End If
            End If
        Next
    End With
    If MyRow Then Sheet2.[A6].Resize(MyRow, 2).Value = MyArr2
End Sub
 
Upvote 0
Chắc bài này sắp xếp được chứ anh Minhthien nhỉ? Tức là ta chỉ cần làm động tác gì đó cho máy nó hiểu khi tìm thấy 913 lập tức MyRow=1, khi tìm thấy 411 lập tức biến MyRow=2, khi tìm thấy 411 lập tức biến MyRow=3? Tất nhiên nó không đơn giản vì còn phải kết hợp với các dòng lệnh khác.

Tôi đang suy nghĩ về cái này nhưng hiện vẫn chưa làm được.

(Các bài Dictionay này là món sở trường của sư phụ Ndu, chắc phải nhờ trình của sư phụ mới dễ dàng giải quyết bài này theo kiểu Dic)
 
Lần chỉnh sửa cuối:
Upvote 0
Chắc bài này sắp xếp được chứ anh Minhthien nhỉ? Tức là ta chỉ cần làm động tác gì đó cho máy nó hiểu khi tìm thấy 913 lập tức MyRow=1, khi tìm thấy 411 lập tức biến MyRow=2, khi tìm thấy 411 lập tức biến MyRow=3? Tất nhiên nó không đơn giản vì còn phải kết hợp với các dòng lệnh khác.

Tôi đang suy nghĩ về cái này nhưng hiện vẫn chưa làm được.
Xem như cũng là 1 ý tưởng tốt
Bạn thử đi xem thế nào!
Làm được cho 3 điều kiện ta sẽ nâng cấp lên bao nhiêu điều kiện tùy ý (bùn lắm thêm 1 vòng lập nữa...)
Ẹc... Ẹc...
 
Upvote 0
Vụ sắp xếp này coi vẻ như vậy mà phức tạp phết, viết mãi gần cả đêm mà không được.

Tôi dự kiến sẽ giải quyết bài toán này như sau:

- Lập ra một vùng điều kiện tại Sheet2 (vùng E1 đến E3) và gán giá trị cho nó như sau E1= 913, E2 = 411, E3 = 5000.
- Tiếp đó dùng Dic một lần nữa để tìm kiếm lọc (tựa như Vlookup trong Excel), dựa các giá trị E1:E3 tìm trong cột B của vùng vừa tìm được (Kq bài của của anh Minhthien la vung A6:B8), lấy giá trị cột B vùng này điền vào cột F tương ứng.
- Copy Value vùng E1:F3 đè lại (A6:B8)
- Xóa vùng E1:E3 đi.

Tôi mới dự kiến như vậy, nhưng chưa biết viết Code ra sao (và có cảm giác cách này chưa tối ưu lắm). Rất mong các thày giúp.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không hiểu nhen mã công việc cột 2 sheet 2 là do mình đánh ra phải không chỉ cần mình tìm bên sheet 1 những giá trị đó đem qua sheet 2 thôi đâu có liên quan dùng Dic đâu ta, với đề bài là trích lọc những mã công việc với điều kiện cho trước mà còn cộng dồn thì mình dùng Dic sau
 
Upvote 0
Vụ sắp xếp này coi vẻ như vậy mà phức tạp phết, viết mãi gần cả đêm mà không được.

Tôi dự kiến sẽ giải quyết bài toán này như sau:

- Lập ra một vùng điều kiện tại Sheet2 (vùng E1 đến E3) và gán giá trị cho nó như sau E1= 913, E2 = 411, E3 = 5000.
- Tiếp đó dùng Dic một lần nữa để tìm kiếm lọc (tựa như Vlookup trong Excel), dựa các giá trị E1:E3 tìm trong cột B của vùng vừa tìm được (Kq bài của của anh Minhthien la vung A6:B8), lấy giá trị cột B vùng này điền vào cột F tương ứng.
- Copy Value vùng E1:F3 đè lại (A6:B6)
- Xóa vùng E1:E3 đi.

Tôi mới dự kiến như vậy, nhưng chưa biết viết Code ra sao (và có cảm giác cách này chưa tối ưu lắm). Rất mong các thày giúp.

Cũng định làm nhưng lại thắc mắc 1 chuyện: Bài này sao không dùng VLOOKUP cho khỏe?
 
Upvote 0
Cũng định làm nhưng lại thắc mắc 1 chuyện: Bài này sao không dùng VLOOKUP cho khỏe?
Đúng rồi bài này em thấy dùng VLookup là ra tuốt luốt rồi sao không dùng mà lại còn liên quan Dic này nọ nữa chứ không lẽ riết bây giờ Code đang là trào lưu thời thượng nên bỏ mấy hàm của Excel hết quá (chắc sợ nặng máy)
 
Upvote 0
Đúng rồi bài này em thấy dùng VLookup là ra tuốt luốt rồi sao không dùng mà lại còn liên quan Dic này nọ nữa chứ không lẽ riết bây giờ Code đang là trào lưu thời thượng nên bỏ mấy hàm của Excel hết quá (chắc sợ nặng máy)
Tui mới mua chiếc SH, đang "dợt" cho quen xe, quãng đường từ nhà ra chợ là 100 mét, tui lấy SH chạy từ nhà ra chợ mua .....một cục nước đá
Híc
 
Upvote 0
Tui mới mua chiếc SH, đang "dợt" cho quen xe, quãng đường từ nhà ra chợ là 100 mét, tui lấy SH chạy từ nhà ra chợ mua .....một cục nước đá
Híc
Vậy bác Cò nhà mình lấy chiếc SH mới mua đi mua nước đá cho cả nhà GPE mình uống cho đã khát cái coi he...he....
 
Upvote 0
Không chỉ vậy, còn cho ai đó trong 50 hộ bên đường biết mình có xe

Tui mới mua chiếc SH, đang "dợt" cho quen xe, quãng đường từ nhà ra chợ là 100 mét, tui lấy SH chạy từ nhà ra chợ mua .....một cục nước đá
Híc


(. . . . . . . . . . . . . . . . . . . . . . . . . . . )
 
Upvote 0
Chắc bác ấy đang khoái mê nghiên cứu VBA quá mà.

Tại ô B6 của Sheet 2 dùng công thức = VLOOKUP(A6;Sheet1!$A$3:$B$19;2;0), sau đó Copy xuống các ô B7, B8 là xong thôi mà.
 
Lần chỉnh sửa cuối:
Upvote 0
Do khối lượng các bảng biểu của em nhiều, các biểu này được cập nhật mỗi ngày trong chương trình kế toán, sáng sớm mối hôm em phải kết xuất dữ liệu sang PDF, rồi từ đó chuyển sang Excel, sau khi có Excel rồi mới tổng hợp theo các chỉ tiêu 913, 411, 5000...nếu gõ.

Thuận lợi của em là mẫu biểu không thay đổi (chỉ có số liệu thay đổi thôi), em muốn viết VBA đối với mỗi loại biểu cố định tức là từ Code sinh ra 911,411,5000 sau đó dùng luôn hàm Vlookup trong VBA thì có làm được không?
 
Upvote 0
Web KT

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

Back
Top Bottom