すべてのセルを検索する流れは変わりません。

前ページの「見つかったすべてのセルを選択状態にする」では、見つかったセルを次々と変数Targetに格納しましたが、その代わりに、見つかったセルを次々と別のシートにコピーすればいいです。なお、ここでは、Sheet1のデータをSheet2にコピーするものとします。
Sub Sample7()
Dim FoundCell As Range, FirstCell As Range
Set FoundCell = Cells.Find(What:="田中")
If FoundCell Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
Set FirstCell = FoundCell
別シートにコピーする
End If
Do
Set FoundCell = Cells.FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
別シートにコピーする
End If
Loop
End Sub

これはもう、検索の話ではありませんね。セルのコピーを、どれだけ自在にプログラミングできるかにかかっています。まず、セルのコピーについておさらいしましょう。
下図のように、Sheet1のセル範囲A2:C2を、Sheet2のセルA2にコピーすることを考えます。

最もシンプルに考えれば、次のように書けます。
Sub Sample8()
Sheets("Sheet1").Range("A2:C2").Copy Sheets("Sheet2").Range("A2")
End Sub
ただし、コピー元である「Range("A2:C2")」は、検索の結果によって変わりますし、コピー先の「Range("A2")」も何件のデータをコピーしたかによって変化します。
Sub Sample8()
検索で見つかったセル.Copy Sheets("Sheet2").A列の最下行+1
End Sub
ということです。コピー元の「検索で見つかったセル」は、もう少し正確に言うと
検索で見つかったセルから、同じ行のC列までのセル範囲
ということですね。

こうしたセル範囲を特定するとき、検索で見つかったセルの行番号を調べて「Range("A" & 行番号 & ":C" & 行番号 」みたいに下品な方法はいただけません。やるなら「Range(Cells(行番号, 1), Cells(行番号, 3))」または「検索で見つかったセル.Resize(1, 3)」でしょう。ここでは、Resizeでやりましょうか。Resize(1, 3)の「3」を定数や変数に格納しておけば、リストの列が増えたときでも対応が簡単です。また、リストの列数を調べて、動的に変化させることも可能です。
Resizeプロパティというのは「ある大きさのセル範囲を、別の大きさに変更した」結果のセル範囲を返すプロパティです。たとえば、単一のセルというのは「1行×1列」の大きさと表せます。

セル範囲A4:C4は「1行×3列」ですね。

では、単一のセル(ここではセルA6)を「1行×3列」に引き延ばしたらどうでしょう。これは、セル範囲A6:C6と同じことですね。

Resizeプロパティの書式は次の通りです。
元のセル範囲.Resize(新しい行数, 新しい列数)
セルA6を「1行×3列」に変更するには
Range("A6").Resize(1, 3)
となります。

Resizeプロパティの働きを理解したところで、実際の処理を考えてみましょう。
検索で見つかるのは、A列の単一セルです。コピーしたいセル範囲は、その見つかったセルの大きさを「1行×3列」に変更したセル範囲になります。つまり「検索で見つかったセル.Resize(1, 3)」です。

処理の流れは次の通りです。
Sub Sample7()
Dim FoundCell As Range, FirstCell As Range
Set FoundCell = Cells.Find(What:="田中")
If FoundCell Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
Set FirstCell = FoundCell
別シートにコピーする
End If
Do
Set FoundCell = Cells.FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
別シートにコピーする
End If
Loop
End Sub
とりあえず、コピー元は確定しましたね。
Sub Sample7()
Dim FoundCell As Range, FirstCell As Range
Set FoundCell = Cells.Find(What:="田中")
If FoundCell Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
Set FirstCell = FoundCell
FoundCell.Resize(1, 3).Copy コピー先
End If
Do
Set FoundCell = Cells.FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
FoundCell.Resize(1, 3).Copy コピー先
End If
Loop
End Sub
では、コピー先はどうしましょう。コピー先は、Sheet2の「最終セルの1つ下のセル」ですね。これを取得する方法は、下記コンテンツで詳しく解説していますので、そちらをご覧ください。
ということで、次のような感じですね。
Sub Sample7()
Dim FoundCell As Range, FirstCell As Range
Set FoundCell = Cells.Find(What:="田中")
If FoundCell Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
Set FirstCell = FoundCell
FoundCell.Resize(1, 3).Copy Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Do
Set FoundCell = Cells.FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
FoundCell.Resize(1, 3).Copy Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Loop
End Sub
見つかったセルのアドレスをUserFormで表示する >> 次ページ