- Tham gia
- 21/12/07
- Bài viết
- 1,902
- Được thích
- 5,303
- Nghề nghiệp
- Kinh doanh các mặt hàng văn phòng phẩm
Qua phần 1, ta đã hiểu được phần nào về phương thức Find.
Áp dụng vào thực tế thì ta xem tiếp các bài tập sau :
Cũng với dữ liệu này :
Bài tập 1.> Yêu cầu đặt ra là tìm trong vùng A1:A10 những ô nào có chứa số 1 thì copy và dán lần lượt vào cột B. Bài toán này tương tự như việc trích lọc ra danh sách theo điều kiện trích lọc.
Ta xem đoạn code sau :
Đoạn Code này cũng tương tự như đoạn Code trong thủ tục Test2. Chỉ khác ở chỗ là thay vì sau mỗi lần tìm thấy ô thỏa mãn điều kiện sẽ hiện bảng thông báo địa chỉ của ô đó thì bây giờ sẽ điền giá trị của ô đó vào cột B.
- Nếu biến Rng khác Nothing thì gán cho biến R=1, vào vòng lặp.
- Điền vào ô Cells(1,2) = [B1] giá trị của biến Rng = 1.
- Tăng biến R lên 1 đơn vị R = 1+1 = 2
- Gán biến Rng cho ô tìm được tiếp theo : Rng = [A3]
- Kiểm tra điều kiện lặp, nếu thỏa thì qua trở lại Do
- Điền vào ô Cells(2,2) = [B2] giá trị của biến Rng = 11.
- Tiếp tục cho đến hết và kết quả như sau :
Bài tập 2>. Yêu cầu thứ 2 là tìm trong vùng A1:A10, C1:C5 những ô nào có chứa số 1 thì copy và dán lần lượt vào cột B.
Nếu ta vẫn áp dụng thủ tục trên cho yêu cầu này thì sẽ không chính xác, vì ta sẽ không xác định được ô LastCell.
Ta sẽ tìm hiểu đoạn Code sau :
- Ở đây, ta sử dụng phương thức Union để ghép các vùng cần trích lọc lại với nhau.
- Tìm ô cuối cùng trong vùng C1:C5 và gán cho biến LastCell : LastCell = [C5].
- Các bước tiếp theo thì tương tự như các Code đã nêu trên
- Tiếp tục cho đến hết và kết quả như sau :
Tiếp theo là giải quyết một nhiệm vụ thực tiển về trích lọc Sổ cái tài khoản từ Sổ Nhật ký chung.
Ta có Dữ liệu mẫu như sau :
Vùng A1
11 là dữ liệu của Sổ NKC
Vùng F1:I11 là kết quả trích lọc TK 111 từ sổ NCK ( Sổ cái TK 111)
Ta xét Macro sau :
So với cách trích lọc dùng For Next thông thường thì Code này vượt trội hơn về tốc độ. Phù hợp với những cơ sở dữ liệu lớn.
Ta có thể kết hợp với thuộc tính End để làm cho dữ liệu tạo sự linh động cho dữ liệu gốc.
Trên đây là nội dung sơ lược về phương thức Find. Chúng ta sẽ cùng tìm hiểu sâu hơn về phương thức này trong các bài tiếp theo.
Một số bài viết có liên quan:
1/ Tổng hợp về phương thức tìm kiếm FIND (P1)
2/ Hướng dẫn sử dụng Ribbon trong Excel 2007 (2010)
3/ Dò tìm nâng cao với hàm VlookupD
4/ Tặng mọi người Addins thao tác và chỉnh sửa Code trong VBA viết bằng VBA và mã mở!
5/ SAP Scripting - Excel và SAP (P2)
6/ Hàm tự tạo ToTable - Chuyển dữ liệu thành dạng bảng
7/ Bạn đang ở quý mấy trong năm?
8/ Thuộc tính End() trong Excel - giới thiệu tổng quan (P1)
9/ Làm nhãn vở học sinh trên Excel
10/ Tặng hàm Calculate tính giá trị theo nội dung diễn giải
Áp dụng vào thực tế thì ta xem tiếp các bài tập sau :
Cũng với dữ liệu này :
Bài tập 1.> Yêu cầu đặt ra là tìm trong vùng A1:A10 những ô nào có chứa số 1 thì copy và dán lần lượt vào cột B. Bài toán này tương tự như việc trích lọc ra danh sách theo điều kiện trích lọc.
Ta xem đoạn code sau :
PHP:
Sub TrichLoc1()
Dim Rng As Range, LastCell As Range, FirstAddress As String
Set LastCell = Selection.Cells(Selection.Cells.Count)
Set Rng = Selection.Find("1*", After:=LastCell, LookIn:=xlValues, LookAt:=xlWhole)
FirstAddress = Rng.Address
If Not Rng Is Nothing Then
R = 1
Do
Cells(R, 2) = Rng
R = R + 1
Set Rng = Selection.FindNext(Rng)
Loop While FirstAddress <> Rng.Address
End If
End Sub
Đoạn Code này cũng tương tự như đoạn Code trong thủ tục Test2. Chỉ khác ở chỗ là thay vì sau mỗi lần tìm thấy ô thỏa mãn điều kiện sẽ hiện bảng thông báo địa chỉ của ô đó thì bây giờ sẽ điền giá trị của ô đó vào cột B.
- Nếu biến Rng khác Nothing thì gán cho biến R=1, vào vòng lặp.
- Điền vào ô Cells(1,2) = [B1] giá trị của biến Rng = 1.
- Tăng biến R lên 1 đơn vị R = 1+1 = 2
- Gán biến Rng cho ô tìm được tiếp theo : Rng = [A3]
- Kiểm tra điều kiện lặp, nếu thỏa thì qua trở lại Do
- Điền vào ô Cells(2,2) = [B2] giá trị của biến Rng = 11.
- Tiếp tục cho đến hết và kết quả như sau :
Bài tập 2>. Yêu cầu thứ 2 là tìm trong vùng A1:A10, C1:C5 những ô nào có chứa số 1 thì copy và dán lần lượt vào cột B.
Nếu ta vẫn áp dụng thủ tục trên cho yêu cầu này thì sẽ không chính xác, vì ta sẽ không xác định được ô LastCell.
Ta sẽ tìm hiểu đoạn Code sau :
PHP:
Sub TrichLoc2()
Dim RngData As Range, Rng As Range, LastCell As Range, FirstAddress As String
Set RngData = Union(Range("A1:A20"), Range("C1:C5"))
Set LastCell = Range("C1:C5").Cells(Range("C1:C5").Cells.Count)
Set Rng = RngData.Find("1*", After:=LastCell, LookIn:=xlValues, LookAt:=xlWhole)
FirstAddress = Rng.Address
If Not Rng Is Nothing Then
R = 1
Do
Cells(R, 2) = Rng
R = R + 1
Set Rng = RngData.FindNext(Rng)
Loop While FirstAddress <> Rng.Address
End If
End Sub
- Ở đây, ta sử dụng phương thức Union để ghép các vùng cần trích lọc lại với nhau.
- Tìm ô cuối cùng trong vùng C1:C5 và gán cho biến LastCell : LastCell = [C5].
- Các bước tiếp theo thì tương tự như các Code đã nêu trên
- Tiếp tục cho đến hết và kết quả như sau :
Tiếp theo là giải quyết một nhiệm vụ thực tiển về trích lọc Sổ cái tài khoản từ Sổ Nhật ký chung.
Ta có Dữ liệu mẫu như sau :
Vùng A1

Vùng F1:I11 là kết quả trích lọc TK 111 từ sổ NCK ( Sổ cái TK 111)
Ta xét Macro sau :
PHP:
Sub TrichLocSocai()
Dim Rng As Range, LastCell As Range
Dim FirstAddress As String, R As Long, SaveRow As Long
Application.ScreenUpdating = False
With Range("B2:C11")
Set LastCell = .Cells(.Cells.Count)
Set Rng = .Find("111*", After:=LastCell, LookIn:=xlValues, LookAt:=xlWhole)
FirstAddress = Rng.Address
If Not Rng Is Nothing Then
R = 2
Do
SaveRow = Rng.Row
Select Case Rng.Column
Case 2
Cells(R, 6) = Rng.Offset(, -1)
Cells(R, 7) = Rng.Offset(, 1)
Cells(R, 8) = Rng.Offset(, 2)
Case 3
Cells(R, 6) = Rng.Offset(, -2)
Cells(R, 7) = Rng.Offset(, -1)
Cells(R, 9) = Rng.Offset(, 1)
End Select
R = R + 1
Set Rng = .FindNext(Rng)
Loop While FirstAddress <> Rng.Address And SaveRow <> Rng.Row
End If
End With
Set LastCell = Nothing: Set Rng = Nothing
Application.ScreenUpdating = True
End Sub
So với cách trích lọc dùng For Next thông thường thì Code này vượt trội hơn về tốc độ. Phù hợp với những cơ sở dữ liệu lớn.
Ta có thể kết hợp với thuộc tính End để làm cho dữ liệu tạo sự linh động cho dữ liệu gốc.
Trên đây là nội dung sơ lược về phương thức Find. Chúng ta sẽ cùng tìm hiểu sâu hơn về phương thức này trong các bài tiếp theo.
Một số bài viết có liên quan:
1/ Tổng hợp về phương thức tìm kiếm FIND (P1)
2/ Hướng dẫn sử dụng Ribbon trong Excel 2007 (2010)
3/ Dò tìm nâng cao với hàm VlookupD
4/ Tặng mọi người Addins thao tác và chỉnh sửa Code trong VBA viết bằng VBA và mã mở!
5/ SAP Scripting - Excel và SAP (P2)
6/ Hàm tự tạo ToTable - Chuyển dữ liệu thành dạng bảng
7/ Bạn đang ở quý mấy trong năm?
8/ Thuộc tính End() trong Excel - giới thiệu tổng quan (P1)
9/ Làm nhãn vở học sinh trên Excel
10/ Tặng hàm Calculate tính giá trị theo nội dung diễn giải
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote
0