| 
    
     |  | 横から失礼します 列を抜き出して書き込むならこんなやり方も有るよ
 Split関数を仕様しているので、Excel2000以降じゃないと使え無いけど
 ただし、Excel97でもSplit関数の代替を作れば遅く成るけど可能
 Split関数の代替は必要なら考えて見ます
 >不規則な部分の項目(列)
 と有りますが、これも条件が解れば組み込み可能かもしれません
 
 Public Sub TextRead()
 
 Dim i As Long
 Dim vntFileName As Variant
 Dim dfn As Integer
 Dim strBuff As String
 Dim vntColm As Variant
 Dim vntData As Variant
 Dim vntWrite As Variant
 Dim lngWriteRow As Long
 Const cstrFilter As String _
 = "テキスト (*.txt),*.txt,CSV (*.csv),*.csv,全て (*.*),*.*"
 Const cstrTitle As String = "読み込みファイルの選択"
 
 '読み込む列の指定
 vntColm = Array(15, 16, 42)
 vntColm = Array(2, 4, 6)
 '書き込み用配列の確保
 ReDim vntWrite(UBound(vntColm))
 
 '読み込むファイル名を指定
 vntFileName _
 = Application.GetOpenFilename(cstrFilter, 1, cstrTitle)
 If vntFileName = False Then
 Exit Sub
 End If
 'ファイルをInputモードで開く
 dfn = FreeFile
 Open CStr(vntFileName) For Input As dfn
 
 '書き込み行の初期値を設定
 lngWriteRow = 1
 'ファイルの終わりまで繰り返し
 Do Until EOF(dfn)
 '1行(1レコード)読み込み
 Line Input #dfn, strBuff
 '区切文字(Tab)で文字列を区切配列に格納(列数と添え字が等しい)
 vntData = Split(strBuff, vbTab, , vbBinaryCompare)
 '読み込み列を書き込み用配列に代入
 For i = 0 To UBound(vntColm)
 vntWrite(i) = vntData(vntColm(i))
 Next i
 '書き込み位置にデータを書き込み
 With Cells(lngWriteRow, 1)
 Range(.Offset(, 0), .Offset(, _
 UBound(vntColm))).Value = vntWrite
 End With
 '書き込み行を更新
 lngWriteRow = lngWriteRow + 1
 Loop
 
 'ファイルを閉じる
 Close #dfn
 
 End Sub
 
 |  |