以下は、選択したセルにある数字を検索します。最初の結果の検索に加えて、次の結果の検索を続行するかどうかを尋ねられます。これにより、問題のインスタンスが複数ある場合、ワークシートで見つかったすべての結果を「ループ」することができます。また、上位 20 件の問題を含む MainWorksheet で見つかった検索結果も無視されます。Cells.Find 自体は、同じワークシート内にある場合でも、最初に見つかった結果を返すだけです。
また、各シートで課題番号が見つかったかどうか、およびすべてのワークシートがいつチェックされたか (結果が見つからない場合) も通知されます。検索を続行しないと回答すると、チェックされた最新のワークシートで見つかった課題番号の最初のインスタンスに移動します。
ハイパーリンクをシミュレートするには、Intersect (Sean の回答で説明) や FollowHyperlink などのワークシート イベントを使用する必要があります。個人的には、意図せずとも条件が満たされたときに常にトリガーされるため、可能であればワークシート イベントの代わりに使用することを好みます。たとえば、シェイプまたはマクロ ボタンを作成し、それにマクロを割り当てることができます。そうすれば、ユーザーがボタンをクリックしたときにのみコードが実行されます。
また、問題を特定した後に本当にやりたいことが他にある場合はお知らせください。たとえば、関連するセルを自動的に変更したり、見つかったその問題 (またはすべての問題) のすべてのインスタンスのリストを作成したりできます。
幸運を!
'Create a string variable to store the problem status
Dim StringProblemStatus As String
'Create a string variable to store the worksheet name of the main page containing the problem status
Dim StringMainWorksheet
'Create a range variable to store the results of the Find method
Dim RangeFindResults As Range
'Create an integer variable to store the current worksheet number
Dim IntegerSheetCount As Integer
'Set the variable to the problem status stored in the current cell
StringProblemStatus = Selection.Value
'Set the variable to the worksheet name containing the problem status
StringMainWorksheet = ActiveSheet.Name
'Create a For/Next loop so that the following code will evaluate all worksheets in the workbook
For IntegerSheetCount = 1 To ActiveWorkbook.Sheets.Count
Sheets(IntegerSheetCount).Activate
'Search for the problem number within the worksheet
'Check that the sheet being searched is not the MainWorksheet
If ActiveSheet.Name <> StringMainWorksheet Then
'Searches for exact matches
Set RangeFindResults = _
Cells.Find( _
What:=StringProblemStatus, _
After:=ActiveCell, _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False _
)
'Returns a message to the user if the status is not found
If RangeFindResults Is Nothing Then
MsgBox "Problem Status " & StringProblemStatus & " was not found in worksheet " & Sheets(IntegerSheetCount).Name
Else
'Returns a message to the user if the status is found
If MsgBox("Problem Status " & RangeFindResults & " found in worksheet " & _
Sheets(IntegerSheetCount).Name & " in cell " & " " & RangeFindResults.Address & _
". Continue searching?", vbYesNo) = vbNo Then
RangeFindResults.Activate
Exit Sub
End If
End If
End If
'Move to the next worksheet
Next IntegerSheetCount
'Notify the user that all worksheets have been searched
MsgBox "All worksheets searched"
End Sub