CSVファイルをインポートするマクロについて
CSVファイルをインポートするマクロを作成しようと思っているのが、作り方がわかりません。
アドバイスを下さい。
インポートするCSVの書式
"AAA","CC","DFD"
"BBB","FF","HHH"
"JJ","LL","JI"
"Skip"
"A","Y","JI","Y","JI"
"B","L","JI","JI"
"C","IL","JI"
1~3行目はエクセルのD3行,D4行,D5行
4行目はインポートしない
5行目以降はエクセルのA6行,A7行・・・にインポートしたいと思っております。
サンプルを作成して頂けないでしょうか。
下記のソースを元に作成しようとしているのですが、わからなくなってしまいました。
◆作成途中のソース
Sub READ_TextFile()
Const cnsTitle = "テキストファイル読み込み処理"
Const cnsFilter = "CSV形式ファイル (*.csv),*.csv"
Dim xlAPP As Application ' Applicationオブジェクト
Dim intFF As Integer ' FreeFile値
Dim strFileName As String ' OPENするファイル名(フルパス)
Dim vntFileName As Variant ' ファイル名受取り用
Dim X() As Variant ' 読み込んだレコード内容
Dim IX1 As Long ' CSV項目カラムINDEX
Dim GYO As Long ' 収容するセルの行
Dim lngREC As Long ' レコード件数カウンタ
Dim strREC As String ' レコード領域
Dim POS1 As Long ' レコード文字位置INDEX
Dim POS2 As Long ' レコード文字位置INDEX
' Applicationオブジェクト取得
Set xlAPP = Application
' 「ファイルを開く」のダイアログでファイル名の指定を受ける
xlAPP.StatusBar = "読み込むファイル名を指定して下さい。"
vntFileName = xlAPP.GetOpenFilename(FileFilter:=cnsFilter, _
Title:=cnsTitle)
' キャンセルされた場合はFalseが返るので以降の処理は行なわない
If VarType(vntFileName) = vbBoolean Then Exit Sub
strFileName = vntFileName
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(入力モード)
Open strFileName For Input As #intFF
GYO = 13
' ファイルのEOF(End of File)まで繰り返す
Do Until EOF(intFF)
' レコード件数カウンタの加算
lngREC = lngREC + 1
xlAPP.StatusBar = "読み込み中です....(" & lngREC & "レコード目)"
' 行単位にレコードを読み込む
Line Input #intFF, strREC ' (1)
' LineInputより自分で半角カンマを探しCSV→項目分割させる
POS1 = 1
IX1 = 0
ReDim X(IX1) ' 配列を初期化
Do While POS1 <= Len(strREC) ' (2)
POS2 = InStr(POS1, strREC, ",", vbTextCompare) ' (3)
If POS2 < POS1 Then
POS2 = Len(strREC) + 1
End If
ReDim Preserve X(IX1) ' 配列要素数を再設定
X(IX1) = Trim$(Mid$(strREC, POS1, POS2 - POS1)) ' (4)
' シングルクォーテーション、ダブルクォーテーションで囲まれている場合は
' 両端文字を取り除く
If (((Left$(X(IX1), 1) = """") And (Right$(X(IX1), 1) = """")) Or _
((Left$(X(IX1), 1) = "'") And (Right$(X(IX1), 1) = "'"))) Then ' (5)
X(IX1) = Trim$(Mid$(X(IX1), 2, Len(X(IX1)) - 2))
End If
POS1 = POS2 + 1
IX1 = IX1 + 1
Loop
' 行を加算しレコード内容を表示(先頭は2行目)
GYO = GYO + 1
If IX1 >= 1 Then
Range(Cells(GYO, 1), Cells(GYO, IX1)).Value = X ' 配列渡し (6)
End If
Loop
' 指定ファイルをCLOSE
Close #intFF
xlAPP.StatusBar = False
' 終了の表示
MsgBox "ファイル読み込みが完了しました。" & vbCr & _
"レコード件数=" & lngREC & "件", vbInformation, cnsTitle
End Sub
お礼
おお、やはりあったのですね。見つけることができませんでした。簡単に作れました。 どうも、サンキュでした。