投稿者 魔界の仮面弁士  (社会人) 投稿日時 2012/11/26 18:52:24
DataTable 案です。

先の例との差別化のため、同じ科目を複数回受けた場合は、
後で受けた値が有効となるようにしてみました。
該当する科目を受講していない場合、0ではなく空欄になります。

先の回答では File.ReadLines メソッドを使っていますが、
今回は  File.ReadAllLines メソッドを利用しています。

Imports System.IO
Imports System.Text
Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim srcFile As String = "C:\temp\1.csv"
        Dim sjis As Encoding = Encoding.GetEncoding("Shift_JIS")

        '元のcsvを読み込む 
        Dim src = From row In File.ReadAllLines(srcFile, sjis)
          Where row <> "" Let cols = row.Split(",")
          Select New With {.姓 = cols(0), .科目 = cols(1), .点数 = CInt(cols(2))}

        '必要な科目分の列を持ったDataTableを用意 
        Dim tbl As New DataTable()
        tbl.PrimaryKey = {tbl.Columns.Add("姓")}
        For Each col In From row In src Select row.科目 Distinct
            tbl.Columns.Add(col, GetType(Integer))
        Next

        'DataTableに格納 
        For Each r In src
            Dim row = If(tbl.Rows.Find(r.姓), tbl.Rows.Add(r.姓))
            row(r.科目) = r.点数
        Next

        'DataGridView に表示 
        DataGridView1.DataSource = tbl
    End Sub
End Class