Sub test()
Dim ws1 As Worksheet '読込元シート
Dim ws2 As Worksheet '転記先シート
Dim i As Long '表シートの開始行
Dim x As Long '転記先シートの開始行
Dim j As Long 'シート番号
Dim EndRow As Long '最終行
Dim ShiireNM As String 'シートの名前
On Error GoTo ErrProcess: 'エラーがあったら、ErrProcessに飛ぶ
'読込元シートを変数に代入(Excelのシートも変数にできます)
Set ws1 = ThisWorkbook.Worksheets("表") 'ws1は、このExcelブックの「表」というシート
'最終行の取得
EndRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row '表シートの1列目を見て、一番下に値がある行数を取得
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Forに対してNext、Doに対してLoop、Ifに対してEnd Ifが対になっているので、同じインデント(段落)に揃える。
'その中の処理は、インデントを一段下げて書く。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'For = 変数がどこからどこまで処理を続ける
For j = 2 To ThisWorkbook.Worksheets.Count '2シート目から最後のシートまで繰り返す(Worksheets.Count=一番後ろのシートの番号)
'シート名を変数に代入
ShiireNM = ThisWorkbook.Worksheets(j).Name
'転記先のシート名を変数に代入
Set ws2 = ThisWorkbook.Worksheets(ShiireNM)
ws2.Rows("2:" & Rows.Count).ClearContents
'読込元シートのデータの開始行を変数に代入
i = 3
'転記先シートの転記開始行を変数に代入
x = 2
'Do Until = 条件が一致するまで処理を回す
Do Until i = EndRow + 1 '表シートの最後の行まで処理を繰り返す
'表シートの3列目とShiireNMが一致したら、ShiireNMと同じ名称のシートに転記する、一致しなかったら無視
If ws1.Cells(i, 3) = ShiireNM Then
ThisWorkbook.Worksheets(ShiireNM).Cells(x, 2) = ws1.Cells(i, 1) '№を転記
ThisWorkbook.Worksheets(ShiireNM).Cells(x, 3) = ws1.Cells(i, 2) '名前を転記
ThisWorkbook.Worksheets(ShiireNM).Cells(x, 4) = ws1.Cells(i, 3) '性別を転記
x = x + 1 'Xの行に転記したので、転記先の行数を1行進める
End If
i = i + 1 'iの行の処理がおわったので、表シートの行数を1行進める
Loop
Next j
'最後まで転記が終われば、メッセージを出す
MsgBox "転記が完了しました。"
ExitProcess:
Exit Sub '処理を終わらす
ErrProcess:
'メッセージを出す
MsgBox "エラー番号:" & Err.Number & vbCrLf & _
"エラーの種類:" & Err.Description, vbExclamation
Resume ExitProcess 'ExitProcessに飛ぶ
End Sub