Newbie cần giúp đỡ về code VBA tự ẩn cột khi tìm kiếm

Liên hệ QC

kis2m123

Thành viên mới
Tham gia
24/10/19
Bài viết
7
Được thích
0
Em là newbie đang có ý tưởng như sau nhưng trình độ hạn chế + tham khảo khắp google nhưng không thấy nên muốn ngỏ ý nhờ các bác giúp đỡ!

Case của em như sau: trong bảng excel ví dụ:
- Bước 1: em sẽ lọc ra các cột có chứa thông tin ngày/tháng/năm trong vùng tìm kiếm B2-B3, các cột không có giá trị nằm trong vùng tìm kiếm sẽ bị ẩn đi hết.
- Bước 2: tại các cột hiển thị tại bước 1, sẽ filter "giá trị tìm kiếm" trong phần B4 (em lấy ví dụ là filter các dòng có chứ "trọng yếu").

Kính nhờ các bác giúp đỡ cho em để công việc trích xuất giữ liệu của em được rút ngắn thời gian!
Em xin chân thành cảm ơn và kính chúc các bác sức khoẻ!
 

File đính kèm

Em là newbie đang có ý tưởng như sau nhưng trình độ hạn chế + tham khảo khắp google nhưng không thấy nên muốn ngỏ ý nhờ các bác giúp đỡ!

Case của em như sau: trong bảng excel ví dụ:
- Bước 1: em sẽ lọc ra các cột có chứa thông tin ngày/tháng/năm trong vùng tìm kiếm B2-B3, các cột không có giá trị nằm trong vùng tìm kiếm sẽ bị ẩn đi hết.
- Bước 2: tại các cột hiển thị tại bước 1, sẽ filter "giá trị tìm kiếm" trong phần B4 (em lấy ví dụ là filter các dòng có chứ "trọng yếu").

Kính nhờ các bác giúp đỡ cho em để công việc trích xuất giữ liệu của em được rút ngắn thời gian!
Em xin chân thành cảm ơn và kính chúc các bác sức khoẻ!
Bạn dùng advance filter cho nhanh nha!
 

File đính kèm

  • Capture.JPG
    Capture.JPG
    77.8 KB · Đọc: 7
Upvote 0
Bạn dùng advance filter cho nhanh nha!
Dạ cảm ơn bác, em cũng tính đến dùng advance filter nhưng em muốn thao tác lên luôn sheet đó, và sếp e muốn chỉ cần click 2 cái mà ra kết quả
nên e tính dùng macro cho tiện ạ.
Em cũng có nghiên cứu 1 đoạn code nhưng đang không biết làm sao để khi xoá dữ liệu trong ô tìm kiếm thì mọi thứ trở về ban đầu ạ, bác sửa giúp em với!
Em xin cảm ơn bác và chúc bác sức khoẻ!
 

File đính kèm

Upvote 0
Em là newbie đang có ý tưởng như sau nhưng trình độ hạn chế + tham khảo khắp google nhưng không thấy nên muốn ngỏ ý nhờ các bác giúp đỡ!

Case của em như sau: trong bảng excel ví dụ:
- Bước 1: em sẽ lọc ra các cột có chứa thông tin ngày/tháng/năm trong vùng tìm kiếm B2-B3, các cột không có giá trị nằm trong vùng tìm kiếm sẽ bị ẩn đi hết.
- Bước 2: tại các cột hiển thị tại bước 1, sẽ filter "giá trị tìm kiếm" trong phần B4 (em lấy ví dụ là filter các dòng có chứ "trọng yếu").

Kính nhờ các bác giúp đỡ cho em để công việc trích xuất giữ liệu của em được rút ngắn thời gian!
Em xin chân thành cảm ơn và kính chúc các bác sức khoẻ!
Bạn thử.
 

File đính kèm

Upvote 0
Thế mà cứ tưởng bạn làm nghề "Nếm bia". Định thắc mắc về lỗi chính tả.

Hãy đọc kỹ các chú thích để vận dụng vào tập tin thực.

Ô Từ Ngày B1 là bắt buộc. Nếu ô Đến Ngày B2 để trống thì sẽ ẩn hết các cột từ cột Tu Ngay tới cuối.
Mã:
Sub HideAndFilter()
Dim lastRow As Long, lastCol As Long, tungay As Long, denngay As Long, rng As Range, cell_ As Range
    With ThisWorkbook.Worksheets("Sheet1")
        .AutoFilterMode = False
'        hien cac cot an tu truoc
        .Range("A1").Resize(1, 1000).EntireColumn.Hidden = False
'        o Tu ngay
        If .Range("B1") = "" Then Exit Sub
'        dong cuoi cung co du lieu o cot ngay thang dau tien - cot C. Neu thay doi thi thay "C" thich hop
        lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
        If lastRow <= 6 Then Exit Sub
'        o cuoi cung co du lieu o dong ngay thang - hien thoi la dong 6. Neu thay doi thi thay 6 thich hop
        lastCol = .Cells(6, Columns.Count).End(xlToLeft).Column
        If lastCol < 3 Then Exit Sub
'        O ngay thang dau tien. Hien thoi la o C6, dong 6. Neu thay doi thi sua "C6" va 6 thich hop
        Set rng = .Range(.Range("C6"), .Cells(6, lastCol))
'        Tu ngay nhap o B1. Neu thay doi thi sua "B1" thich hop
        Set cell_ = rng.Find(.Range("B1").Value, , xlValues)
        If cell_ Is Nothing Then Exit Sub
        tungay = cell_.Column
'        Den ngay nhap o B2. Neu thay doi thi sua "B2" thich hop
        Set cell_ = rng.Find(.Range("B2").Value, , xlValues)
        If cell_ Is Nothing Then
            denngay = lastCol
        Else
            denngay = cell_.Column
        End If
'        an cac cot duoc chon
        .Range(.Cells(1, tungay), .Cells(1, denngay)).EntireColumn.Hidden = True
'        loc theo cot can loc, hoen thoi la cot C tuc cot co chi so 3. Neu thay doi thi sua 3 thich hop
'        Dieu kien loc o B3. Neu thay doi thi sua "B3" thich hop.
'        hien thoi dong ngay thang la dong 6. Neu thay doi thi sua 6 thich hop
        .Range(.Cells(6, 1), .Cells(lastRow, lastCol)).AutoFilter Field:=3, Criteria1:="=*" & _
                                                                            .Range("B3").Value & "*", Operator:=xlAnd
    End With
End Sub
 
Upvote 0
Em xin chân thành cảm ơn 2 bác snow25 và bác batman1, em đã làm theo và thành công rồi ạ!
Chúc 2 bác sức khoẻ, thành công! :))
 
Upvote 0
Cái niêu nấu bí, bác ơi.
Nhắc mới nhớ, lâu quá chưa được bà xã cho xơi món bí đao kho.
Bà xã nấu toàn món ngon thì sao cứ phải bí đao kho, bác. Mà lúc nào muốn thì nó vẫn đợi đó, nó có chạy mất đâu. Nói như người Ba Lan thì: "Bí đao không phải con thỏ đồng. Nó không chạy đi đâu (mà lo)." :D
 
Upvote 0
Bà xã nấu toàn món ngon thì sao cứ phải bí đao kho, bác. Mà lúc nào muốn thì nó vẫn đợi đó, nó có chạy mất đâu. Nói như người Ba Lan thì: "Bí đao không phải con thỏ đồng. Nó không chạy đi đâu (mà lo)." :D
Em chào các bác!
Bác batman1 ơi em có một thắc mắc đoạn code
"With ThisWorkbook.Worksheets("Sheet1")"
em có thay sheet1 bằng sheet4 nhưng khi chạy thử nó không nhận diện được tên ạ
Nó hiện lỗi "Run-time error '9' - subscript out of range"
 
Upvote 0
Em chào các bác!
Bác batman1 ơi em có một thắc mắc đoạn code
"With ThisWorkbook.Worksheets("Sheet1")"
em có thay sheet1 bằng sheet4 nhưng khi chạy thử nó không nhận diện được tên ạ
Nó hiện lỗi "Run-time error '9' - subscript out of range"
Trong tập tin của bạn nếu bạn nhìn xuống sheet tabs ở dưới cùng thì thấy tên là Sheet1. Trong tập tin hiện thời của bạn sheet đó bây giờ có tên là Sheet4? Bạn đính kèm tập tin để tôi kiểm tra.
 
Upvote 0
Trong tập tin của bạn nếu bạn nhìn xuống sheet tabs ở dưới cùng thì thấy tên là Sheet1. Trong tập tin hiện thời của bạn sheet đó bây giờ có tên là Sheet4? Bạn đính kèm tập tin để tôi kiểm tra.
Dạ em gửi anh ạ!
 

File đính kèm

Upvote 0
Sheet1 là tên mà bạn nhìn thấy ở dưới cùng trên trang tính. Bây giờ nó tên là "Hoạt động tín dụng". Nhưng thay Sheet1 bằng "Hoạt động tín dụng" thì hơi rắc rối vì có ký tự unicode.
Vào VBE bạn thấy tên Sheet4 (Ho?t đ?ng tín d?ng). "Hoạt động tín dụng" là sheetname, Sheet4 là codename. Bạn có thể dùng codename thay cho sheetname, nhất là khi sheetname có ký tự unicode.
Nếu dùng codename thì thay With ThisWorkbook.Worksheets("Sheet1") bằng With Sheet4

Còn vài chỗ phải sửa:

- trước đó tôi viết If lastRow <= 7 Then Exit Sub. Bạn thay 7 trong If lastRow <= 7 bằng chỉ số dòng hiện hành mà ở đó là dòng ngày tháng.

- dòng 6 ở tập tin trước là toàn ngày tháng. Bây giờ dòng ngày tháng là 7 và không có ô nào là ngày tháng. Tất cả chỉ là text giả bộ ngày tháng thôi. Bạn thử công thức vd. (C7 = 31/03/2019)
Mã:
=C7+1
thì thấy kết quả lỗi. Như thế thì C7 không là ngày tháng, chỉ là ngày tháng "nhái" mà thôi. Hãy sửa lại C7:BG7 là ngày tháng "xịn, chính hãng".

- dòng If lastCol < 3 Then Exit Sub. Do cột C ở bài trước chứa ngày tháng đầu tiên mà C là cột 3. Nếu trong tập tin hiện hành ngày tháng đầu tiên trong dòng ngày tháng nằm ở cột khác thì thay 3 bằng chỉ số của cột đó.

- tiêu chí lọc là trọng yếu (không có cắp ký tự " ") chứ không thể là "trọng yếu". Sửa lại B4.

Hãy kiểm tra và nếu cần thì sửa lại những cái tôi viết ở trên.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom