|
ファイルで持ちたいという意味が善く解らないのですが?
こんな事なのかな?
マクロの有るBookに、「設定」と言う名前のシートを作成します
例えば、B2からC2、D2、E2・・・の様に横に読み込みたいCSVの列を読み込みたい順番に入力して置きます
ただし、Splitで分割するので、列の番号は、0から始まります
Public Sub ReadTest2()
Dim dfn As Integer
Dim strBuff As String
Dim vntColm As Variant
Dim vntData As Variant
Dim vntWrite As Variant
Dim lngWriteRow As Long
Dim i As Long
Dim sTXTPATH As String
Dim sTXTName_i As String
Dim sNewbook_name As String
Dim sSheetName As String
sTXTPATH = ThisWorkbook.Path & "\"
sTXTName_i = "TestData.csv"
sNewbook_name = ThisWorkbook.Name
sSheetName = "Sheet1"
'読み込む列番号を配列に読み込み
With ThisWorkbook.Worksheets("設定")
vntColm = Range(.Cells(2, "B"), _
.Cells(2, "IV").End(xlToLeft)).Value
End With
'書き込み用配列の確保
ReDim vntWrite(1 To UBound(vntColm, 2))
'貼付行設定
lngWriteRow = 1
'ファイルオープン
dfn = FreeFile
Open CStr(sTXTPATH & sTXTName_i) For Input As dfn
'ファイルの終わりまで繰り返し
With Workbooks(sNewbook_name).Worksheets(sSheetName)
Do Until EOF(dfn)
'1行(1レコード)読み込み
Line Input #dfn, strBuff
'区切文字(Tab)で文字列を区切配列に格納(列数と添え字が等しい)
vntData = Split(strBuff, vbTab, , vbBinaryCompare)
'読み込み列を書き込み用配列に代入
For i = 1 To UBound(vntColm, 2)
vntWrite(i) = vntData(vntColm(1, i))
Next i
'書き込み位置にデータを書き込み
With .Cells(lngWriteRow, 1)
.Resize(, UBound(vntColm, 2)).Value = vntWrite
End With
'書き込み行を更新
lngWriteRow = lngWriteRow + 1
Loop
End With
'ファイルを閉じます
Close #dfn
End Sub
|
|