Bài viết này sẽ trình bày cách sử dụng VBA để tìm một giá trị trong một cột.
Chúng ta có thể sử dụng Range.Find để lặp qua một cột giá trị trong VBA để tìm tất cả các ô trong phạm vi phù hợp với tiêu chí được chỉ định.
Vòng qua một cột với Range.Find và Range.FindNext
Trong ví dụ dưới đây, chúng tôi đang lặp lại dữ liệu trong cột và tìm từ "Quá hạn". Khi tìm thấy từ, nó sẽ đánh dấu ô bằng cách thay đổi màu của văn bản ô thành màu đỏ. Sau đó, nó sẽ cho chúng ta phương thức Range.FindNext để chuyển sang ô tiếp theo và tiếp tục tìm kiếm từ đó, tiếp tục vòng lặp cho đến khi kết thúc phạm vi ô đã chỉ định.
1234567891011121314151617 | Sub FindLoop ()Dim strFirstAddress As StringDim rngFindValue As RangeDim rngSearch As RangeDim rngTìm theo phạm viĐặt rngFind = ActiveSheet.Range ("F1: F17")Đặt rngSearch = rngFind.Cells (rngFind.Cells.Count)Đặt rngFindValue = rngFind.Find ("Quá hạn", rngSearch, xlValues)Nếu không rngFindValue thì không có gìstrFirstAddress = rngFindValue.AddressrngFindValue.Font.Color = vbRedLàmĐặt rngFindValue = rngFind.FindNext (rngFindValue)rngFindValue.Font.Color = vbRedLoop Until rngFindValue.Address = strFirstAddressKết thúc nếuKết thúc Sub |
Khi mã chạy, nó sẽ lưu địa chỉ của ô đầu tiên nơi dữ liệu được tìm thấy trong biến strFirstAddress và thay đổi màu của văn bản thành màu đỏ. Sau đó, một vòng lặp được tạo để tìm ô tiếp theo chứa dữ liệu cần thiết. Khi giá trị được tìm thấy, màu của văn bản được thay đổi thành màu đỏ và sau đó địa chỉ của ô nơi giá trị được tìm thấy sẽ được so sánh với chuỗi strFirstAddress. Nếu chúng không giống nhau, vòng lặp tiếp tục, tìm từng trường hợp của từ “Quá hạn”. Khi vòng lặp đến cuối phạm vi ô (tức là F17), nó sẽ bắt đầu trở lại ở đầu phạm vi (F1) và tiếp tục lặp. Khi nó đến địa chỉ ô F3 lần thứ hai, vì nó giống với biến được lưu trữ strFirstAddress, vòng lặp sẽ dừng lại.