|
1点教えて下さい。
csvファイルの変換の処理です。
csvのファイルをxls形式に変換しています。
"AAAA,BBBB",2,3, のようなケースで""を除いて
,(カンマ)の箇所まで1項目として処理しているのですが
項目中の,の場合にうまく変換できません。
対応方法を教えて下さい。
以下の変換はWebで検索してそのまま利用している処理になります。
シングルコーテーション、ダブルコーテーションで囲まれている場合は両端文字を取り除く処理で,も条件にいれてみたのですがうまく行かなくなった
ので教えて下さい。
最悪、項目中のカンマは別の文字に置き換えてもかまわないのですが・・
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(入力モード)
Open strFILENAME For Input As #intFF
GYO = 1
' ファイルの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
|
|