| 
    
     |  | こんにちは。 
 質問はよく考えて追加しないように解答者にとっては2重になりますから。
 ついでに性別も追加できるようにしておきました。
 使う場合は性別無しの下の行をコメントにして
 性別有りの下の行をコメントを外してください。
 
 御自分の質問だけでなく他の質問者の内容もチェックして
 自分だったらどう考えるかなとかしてみましょう。
 実践的で勉強になると思います。
 よそのサイトですが
 //www.moug.net/faq/viewforum.php?f=2
 も参考にしてみられては。
 
 Option Explicit
 
 Sub TESTa()
 Dim Dic   As Object
 Dim v    As Variant
 Dim i    As Long
 Dim j    As Long
 Dim sht   As Worksheet
 Dim eRow  As Long
 
 ' result シートのチェック
 On Error Resume Next
 Set sht = Worksheets("result")
 If Err.Number = 0 Then
 sht.Cells.ClearContents   'シートがあったらクリア
 Else              '無かったら追加
 Set sht = Worksheets.Add(After:=Worksheets(Worksheets.Count))
 sht.Name = "result"     '名前を result
 End If
 On Error GoTo 0
 ' ******************* 此処まで **************
 
 With Worksheets("Sheet1")
 v = .Range("A1").CurrentRegion.Value
 End With
 ' Dictionary に登録
 Set Dic = CreateObject("Scripting.Dictionary")
 For i = 2 To UBound(v)
 Dic(v(i, 1)) = i
 Next
 
 ' 性別有り ***** この↓1行
 '  sht.Cells(1, 1).Resize(, 7).Value = Array("番号", "No.", "名前", "性別", "住所", "年齢", "特徴")
 ' 性別無し ***** この↓1行
 sht.Cells(1, 1).Resize(, 6).Value = Array("番号", "No.", "名前", "住所", "年齢", "特徴")
 
 eRow = 1
 With Worksheets("Sheet2")
 '    .Cells(1, 1).Resize(, 5).Copy sht.Cells(eRow, 1)
 For i = 2 To .Range("B" & .Rows.Count).End(xlUp).Row
 '      Dictionary の登録とあえば
 If Dic.Exists(.Cells(i, 2).Value) Then
 '        行を追加してコピペ
 eRow = eRow + 1
 sht.Cells(eRow, 1).Value = eRow - 1
 .Cells(i, 2).Resize(, 1).Copy sht.Cells(eRow, 2)
 '性別有り ***** この↓ 2行
 '        Worksheets("Sheet1").Cells(Dic(.Cells(i, 2).Value), 2).Resize(, 2).Copy sht.Cells(eRow, 3)
 '        .Cells(i, 3).Resize(, 3).Copy sht.Cells(eRow, 5)
 '性別無し ***** この↓ 2行
 Worksheets("Sheet1").Cells(Dic(.Cells(i, 2).Value), 2).Resize(, 1).Copy sht.Cells(eRow, 3)
 .Cells(i, 3).Resize(, 3).Copy sht.Cells(eRow, 4)
 End If
 Next
 End With
 End Sub
 
 |  |