| 
    
     |  | ▼はやしはる さん: 
 データ範囲を変数に取り込んで、そこから1列ずつ、とりだして
 順番に転記していくと考えれば、こんな感じになります。
 
 作業通りにコードを記述すれば出来上がるので簡単です。
 
 
 Option Explicit
 
 Sub test()
 Dim tbl As Range
 Dim n As Long
 Dim k As Long
 Dim dst As Range
 
 Set tbl = Range("a1").CurrentRegion
 Set tbl = Intersect(tbl, tbl.Offset(1))
 n = tbl.Rows.Count
 
 Worksheets.Add
 
 Range("a1:c1").Value = Array("出席番号", "科目", "得点")
 
 For k = 2 To 5
 Set dst = Range("a" & Rows.Count).End(xlUp).Offset(1).Resize(n)
 dst.Value = tbl.Columns(1).Value
 dst.Offset(, 1).Value = tbl.Columns(k).Cells(0).Value
 dst.Offset(, 2).Value = tbl.Columns(k).Value
 Next
 
 End Sub
 
 |  |