Kelly có một sổ làm việc chứa hàng trăm trang tính. Mỗi trang tính đại diện cho một dự án riêng lẻ cho công ty của cô ấy. Ô C4 của mỗi trang tính chứa số dự án cho dự án cụ thể đó.

Tìm kiếm các dự án riêng lẻ trong số hàng trăm dự án trong sổ làm việc là rất cồng kềnh, tốt nhất là. Cô ấy tự hỏi liệu có thể tạo macro để tất cả người dùng nhập số công việc, tìm trang tính có số công việc đó trong ô C4, rồi hiển thị trang tính đó.

Trước khi giải quyết cách thực hiện việc này trong macro, bạn nên hiểu rằng bạn có thể tìm thấy dự án mong muốn bằng các công cụ gốc của Excel.

Tất cả những gì bạn cần làm là làm theo các bước sau:

  1. Nhấn Ctrl + F. Excel hiển thị tab Tìm của hộp thoại Tìm và Thay thế.

  2. Nhấp vào nút Tùy chọn để mở rộng hộp thoại. (Xem Hình 1.)

  3. Sử dụng danh sách thả xuống Trong, chọn Sổ làm việc.

  4. Nếu ô C4 trong mỗi trang tính chỉ chứa số dự án, hãy chọn hộp kiểm Khớp Toàn bộ Nội dung Ô.

  5. Nhấp vào Tìm tiếp theo.

Đó là nó; bạn sẽ được đưa đến phiên bản đầu tiên của ô chứa số dự án của bạn. Nếu sổ làm việc của bạn chứa số dự án trong nhiều ô (ngoài ô C4), thì việc sử dụng công cụ Tìm có thể hơi tẻ nhạt; bạn sẽ cần tiếp tục nhấp vào Tìm Tiếp theo cho đến khi tìm được trang tính chính xác. Trong tình huống như vậy, macro có thể là giải pháp tốt nhất vì nó cho phép bạn xem xét cụ thể ô C4 và bỏ qua bất kỳ thứ gì nằm trong bất kỳ ô nào khác.

Macro sau sẽ nhắc người dùng nhập số dự án. Sau đó, nó tìm kiếm từng trang tính trong sổ làm việc để tìm trang tính đầu tiên trong đó ô C4 chứa số dự án đó. Nếu được tìm thấy, macro sẽ hiển thị trang tính và kích hoạt ô. Nếu không tìm thấy, một thông báo sẽ hiển thị cho biết như vậy.

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

Có hai vấn đề tiềm ẩn với macro này. Đầu tiên, nếu số dự án của bạn thực sự là một số, thì macro có thể không tìm thấy nó vì nó tìm kiếm các chuỗi văn bản. Thứ hai, nếu có nhiều trang tính sử dụng cùng một số dự án, bạn sẽ không bao giờ biết được điều đó vì macro luôn dừng lại ở trang tính có số dự án phù hợp đầu tiên trong ô C4. Bạn có thể khắc phục cả hai vấn đề này bằng cách thực hiện một vài thay đổi trong macro.

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

Với phiên bản macro này, trang tính dự án chỉ được hiển thị nếu số dự án là duy nhất trong số tất cả các trang tính. Nếu có nhiều trường hợp mà số dự án giống nhau, bạn sẽ được thông báo về tên của các trang tính đó, nhưng không có trang tính nào được chọn.

Bạn có thể, nếu muốn, làm cho macro đơn giản hơn nhiều bằng cách đổi tên tất cả các trang tính của bạn thành số dự án. Điều này cũng sẽ có thêm lợi ích là đảm bảo rằng không có dự án nào thực sự sử dụng hai trang tính. (Tất cả các tên trang tính phải là duy nhất, vì vậy nếu mỗi trang tính sử dụng số dự án làm tên, bạn chỉ có thể có một trang tính cho mỗi số dự án.) Nếu bạn thực hiện phương pháp này, bạn có thể sử dụng macro tương tự như sau để tìm và nhảy sang trang tính mong muốn:

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

ExcelTips là nguồn của bạn để đào tạo Microsoft Excel hiệu quả về chi phí.

Mẹo này (13489) áp dụng cho Microsoft Excel 2007, 2010, 2013 và 2016.