ケリーは、何百ものワークシートを含むワークブックを持っています。各ワークシートは、彼女の会社の個々のプロジェクトを表しています。各ワークシートのセルC4には、その特定のプロジェクトのプロジェクト番号が含まれています。

ブック内の数百のプロジェクトから個々のプロジェクトを見つけるのは、せいぜい面倒です。彼女は、すべてのユーザーがジョブ番号を入力し、セルC4でそのジョブ番号を持つワークシートを見つけて、そのワークシートを表示するマクロを作成できるかどうか疑問に思います。

マクロでこれを行う方法を説明する前に、Excelのネイティブツールを使用して目的のプロジェクトを見つけることができる場合があることを理解する必要があります。

あなたがする必要があるのはこれらのステップに従うことだけです:

。 Ctrl + Fを押します。 Excelは、[検索と置換]ダイアログボックスの[検索]タブを表示します。

。 [オプション]ボタンをクリックして、ダイアログボックスを展開します。 (図1を参照)

。 [範囲内]ドロップダウンリストを使用して、[ワークブック]を選択します。

。各ワークシートのセルC4にプロジェクト番号のみが含まれている場合は、[セルの内容全体を一致させる]チェックボックスをオンにします。

。 [次を検索]をクリックします。

それでおしまい;プロジェクト番号を含むセルの最初のインスタンスに移動する必要があります。ワークブックの複数のセル(セルC4以外)にプロジェクト番号が含まれている場合、検索ツールの使用は少し面倒な場合があります。正しいワークシートが見つかるまで、[次を検索]をクリックし続ける必要があります。このような状況では、マクロはセルC4を具体的に調べて、他のセルにあるものをすべて無視できるため、最適なソリューションになる可能性があります。

次のマクロは、ユーザーにプロジェクト番号の入力を求めます。次に、ワークブック内の各ワークシートで、セルC4にそのプロジェクト番号が含まれている最初のワークシートを検索します。見つかった場合、マクロはワークシートを表示し、セルをアクティブにします。見つからない場合は、そのことを示すメッセージが表示されます。

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

このマクロには2つの潜在的な問題があります。まず、プロジェクト番号が実際に番号である場合、マクロはテキスト文字列を検索するときにそれを見つけられない可能性があります。次に、同じプロジェクト番号を使用するワークシートが複数ある場合、マクロは常にセルC4の最初に一致するプロジェクト番号のワークシートで停止するため、それを知ることはできません。マクロにいくつかの変更を加えることで、これらの問題の両方を克服できます。

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

このバージョンのマクロでは、プロジェクト番号がすべてのワークシートの中で一意である場合にのみ、プロジェクトワークシートが表示されます。プロジェクト番号が同じであるインスタンスが複数ある場合、それらのワークシートの名前が通知されますが、ワークシートは選択されていません。

必要に応じて、すべてのワークシートの名前をプロジェクト番号に変更することで、マクロをはるかに簡単にすることができます。これには、プロジェクトが実際に2つのワークシートを使用しないようにするという追加の利点もあります。 (すべてのワークシート名は一意である必要があるため、各ワークシートでプロジェクト番号を使用する場合、プロジェクト番号ごとに1つのワークシートしか持てません。)このアプローチを採用する場合は、次のようなマクロを使用して検索してジャンプできます。目的のワークシートへ:

Sub FindProject3()

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

End Sub

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13489)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。