| 
    
     |  | ▼Asaki さん: ありがとうございます。
 申し訳はありません。説明不足で迷惑かけて大変申し訳はありません。
 実行してみたらエラー13(型が一致しません)と表示してありますが
 もしかしたらシート1が氏名だけなく年齢と社員番号、性別、備考1備考2備考3が
 あります。これを変換しないてこのままでコピーして以降は変換してコピーします。
 シート1(データ元)
 A  B  C  D   E  F  G  H  I  J K L M N L O 〜 BM
 氏名 社番 年齢 性別 ID 備1 備2 備3 A-1 2 3 4 5 6 7 8....65まで
 ss  001  25  1  001        2  2 2 1 2 3 4 3....
 si  002  23  2  002        2  1 3 2 4 2 2 3....
 ai  003  20  2  003        2  3 1 3 2 1 3 3....
 oh  004  50  2  004        3  2 3 3 3 2 1 1....
 aa  005  33  1  005        3  2 1 3 2 3 3 1....
 ・
 ・
 
 シート2(検査範囲用)
 A BCDEFGHIJ K L M N L O P
 − 12345678910111213141516〜65まで データ元の列と順番通りです。
 1点333300030 3 0 3 0 0 3 3...   縦A列の1234は点数です。
 2点222211121 2 1 2 1 1 2 2... B2セルは2点ならばB列にA列の2点に当てはまり
 3点111122212 1 2 1 2 2 1 1... 2点なります。
 4点000033303 0 3 0 3 3 0 0...
 
 シート3(データ変換後)
 A  B  C  D   E  F  G  H  I  J K L M N L O 〜 BM
 氏名 社番 年齢 性別 ID 備1 備2 備3 A-1 2 3 4 5 6 7 8....65まで
 ss  001  25  1  001        2  2 2 3 2 2 3 1....
 si  002  23  2  002        3  3 1 2 3 1 1 1....
 ai  003  20  2  003        2  1 3 1 1 0 2 1....
 oh  004  50  2  004        1  2 1 1 2 1 0 3....
 aa  005  33  1  005        1  2 3 1 1 2 2 3....
 
 前より詳しく説明しますのでよろしくお願いします。
 ・
 
 B2セルにデータ元を読み取ってシート2の元で置換してシート3(シート3へコピー?表示?)へ表示して行が空欄するまで繰り返しします
 
 2→シート2にVLOOKUP関数で一致したら置換してシート3へ表示します。
 
 >Sub test()
 >  Dim rngOrg   As Range
 >  Dim rngRes   As Range
 >  Dim c      As Range
 >  Dim i      As Long
 >
 >  '変換前データのセル範囲を変数に設定
 >  With Worksheets("Sheet1")
 >    Set rngOrg = .Range(.Cells(1, 2), .Cells(65536, 1).End(xlUp).Offset(, 16))
 >  End With
 >  '変換後データ格納セルをクリア、セル範囲を変数に設定
 >  '項目名コピー
 >  With Worksheets("Sheet3")
 >    Set rngRes = .Range(rngOrg.Address)
 >    .UsedRange.Clear
 >    .Cells(1, 1).Resize(rngOrg.Rows.Count).Value = rngOrg.Resize(, 1).Offset(, -1).Value
 >  End With
 >
 >  '変換
 >  i = 1
 >  With Worksheets("Sheet2")
 >    For Each c In rngOrg
 >      rngRes(i).Value = .Cells(c.Value + 1, c.Column).Value
 >      i = i + 1
 >    Next c
 >  End With
 >
 >  'オブジェクト解放
 >  Set rngOrg = Nothing
 >  Set rngRes = Nothing
 >
 >End Sub
 >
 >
 >ちなみに、ループは回し始めたのと逆の順に Next を書くことになります。
 知らなかった。いい勉強になりました。
 
 |  |