MichaelがExcelで「すべて検索」操作を実行すると、プログラムは、検索しているものを含むすべてのセルのリストを表示します。

Michaelは、セルアドレスのリストを別のワークシートにコピーしたいので、リストをクリップボードにコピーしてワークシートに貼り付ける方法があるかどうか疑問に思います。

このタスクを実行する方法はいくつかあり、そのほとんどはマクロの使用を伴います。ただし、マクロベースのアプローチに入る前に、名前付き範囲と名前マネージャーを使用してアドレスにアクセスする方法を見てみましょう。

。以前と同じようにFindAllを使用しますが、[検索と置換]ダイアログボックスを閉じないでください。

。表示されているアドレスのリストで、一番下までスクロールし、Shiftキーを押しながら、最後に一致するものをクリックします。 Excelは、一致するすべてのセルを選択します。

。 Escキーを押して、[検索と置換]ダイアログボックスを閉じます。一致するセルはまだすべて選択されています。

。名前ボックスに名前を入力します(数式バーのすぐ左、セルA1のすぐ上)。これにより、選択したすべてのセルで構成される名前付き範囲が作成されます。

。リボンの[数式]タブを表示します。

。 NameMangerツールをクリックします。 Excelは、ネームマネージャのダイアログボックスを表示します。 (図1を参照)

。手順4で作成した名前をクリックします。

。セルのリストは、ダイアログボックスの下部にある[参照先]ボックスに表示されます。

この時点で、[参照先]ボックスの情報をコピーして、必要なもの(別のワークシートを含む)に貼り付けることができます。リストはセルアドレスのシリアルリストであるため、貼り付けた後、データを少しマッサージする必要があります。

明らかに、これは名前付き範囲を作成するため、ブックに影響します。複数回実行すると、複数の名前付き範囲が作成されます。

もちろん、タスクを頻繁に実行する必要がある場合、これはすぐに扱いにくくなる可能性があります。ここで、マクロソリューションが役立ちます。以下は、特定の値を検索し、その値を含むすべてのセルのアドレスを別のワークシートに配置するマクロの例です。

Sub CellAdressList()

Dim c1 As String     Dim nxt As String

Sheets("Sheet1").Select     Range("A1").Select     Cells.Find(What:="qrs", After:=ActiveCell, _       LookIn:=xlValues, LookAt:=xlWhole, _       SearchOrder:=xlByRows, SearchDirection:=xlNext, _       MatchCase:=False, SearchFormat:=False).Activate     c1 = ActiveCell.Address     Sheets("Sheet2").Select     Range("A1").Select     Range("A1").Value = c1     Do Until nxt = c1         Sheets("Sheet1").Select         Cells.FindNext(After:=ActiveCell).Activate         nxt = ActiveCell.Address         Sheets("Sheet2").Select         ActiveCell.Offset(1, 0).Select         ActiveCell.Value = nxt     Loop     ActiveCell.Value = ""

End Sub

マクロはいくつかの仮定をします。まず、Sheet1という名前のワークシートで情報を検索していることを前提としています。次に、Sheet2という名前のワークシートに住所のリストを配置する必要があることを前提としています。最後に、Sheet1内で値「qrs」を検索していることを前提としています。必要に応じて、マクロのこれらすべての要素を変更できます。

もう少し柔軟なものについては、次のマクロを検討してください。必要な値を含むすべてのセルがすでに選択されていることを前提としています。 (つまり、このヒントの冒頭近くにあるステップのステップ1から3を実行する必要があります。)その後、マクロを実行できます。

Sub CopyFindAllSelection()

Dim outcell As Range     Dim c As Range

Set outcell = Range("Sheet2!A1")

For Each c In Selection         outcell.Value = c.Address         Set outcell = outcell.Offset(1, 0)

Next End Sub

その結果、選択したセルのアドレスがSheet2ワークシートに配置されます。このマクロは、任意のワークシートで何でも検索できるため、もう少し柔軟性があります。 「ハードコードされた」唯一の部分

アドレスが配置されるワークシート(Sheet2)です。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

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

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