##やりたいこと
以下のようなCSVファイルをエクセルにインポートしたい。
- データは「""」で囲まれている
- 改行コードはLF
- データ内に「,」や「:」が含まれている
##やってみたコード
VBA
1Sub Import() 2 3 Dim ws As Worksheet 4 Set ws = ThisWorkbook.Worksheets(1) 5 6 Dim myFile As Variant 7 ChDir "C:\vba" 8 myFile = Application.GetOpenFilename("CSVファイル(*.csv),*.csv") 9 10 Dim i, j As Long 11 Dim strLine As String 12 Dim arrLine As Variant 13 14 'csvファイルをオープン 15 Open myFile For Input As #1 16 17 i = 1 18 Do Until EOF(1) 19 Line Input #1, strLine 20 'strLineを=で区切りarrLineに格納 21 arrLine = Split(Replace(replaceColon(strLine), """", ""), "=") 22 For j = 0 To UBound(arrLine) 23 ws.Cells(i, j + 1).Value = arrLine(j) 24 Next j 25 i = i + 1 26 Loop 27 Close #1 28End Sub 29 30 31'受け取った文字列のカンマをコロンに置き換える 32'ダブルクォーテーションで囲まれているカンマは置き換えない 33Function replaceColon(ByVal str As String) As String 34 35 Dim strTemp As String 36 Dim quotCount As Long 37 38 Dim l As Long 39 'strの長さだけ繰り返す 40 For l = 1 To Len(str) 41 42 'strから現在の1文字を切り出す 43 strTemp = Mid(str, l, 1) 44 'strTempがダブルクォーテーションなら 45 If strTemp = """" Then 46 'ダブルクォーテーションのカウントを1増やす 47 quotCount = quotCount + 1 48 'strTempがカンマなら 49 ElseIf strTemp = "," Then 50 'quotCountが2の倍数なら 51 If quotCount Mod 2 = 0 Then 52 '現在の1文字を=に置き換える 53 str = Left(str, l - 1) & "=" & Right(str, Len(str) - l) 54 End If 55 End If 56 Next l 57 58 replaceColon = str 59 60End Function
##結果
CSVの改行コードをCRLFにするとうまくいくが、LFの場合すべてのデータが改行されず1行目に格納されてしまいました。
以下参考サイトサンプルではコロン「:」で区切っていたようですが、本CSVデータには日時のデータも含まれているため、コロンを使用するとそこでデータが区切られセルに格納されてしまいました。そのため代わりに「=」を使用しました。
##参考サイト
https://tonari-it.com/vba-csv-camma/
改行コードがLFでもきちんとエクセル内にインポートされるにはどのように改変したらよいのでしょうか。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/14 05:34
2021/04/14 06:16
2021/04/14 08:24
2021/04/14 10:12