CSVを取込み、エクセルシートに表示をすると値がずれてしまいます。
以下のコードを使用して取り込みましたが項目内のカンマで値がずれてしまいます・・
ダブルクォーテーション内のカンマを削除なり、置換をしたいです
replace等も使用しましたが、上手くいきません
ご教示いただけると幸いです
<CSV> ``` Name,Email,Financial Status,Paid at,Fulfillment Status,Fulfilled at,Accepts Marketing,Currency,Subtotal,Shipping,Taxes,Total,Discount Code,Discount Amount,Shipping Method,Created at,Lineitem quantity,Lineitem name,Lineitem price,Lineitem compare at price,Lineitem sku,Lineitem requires shipping,Lineitem taxable,Lineitem fulfillment status,Billing Name,Billing Street,Billing Address1,Billing Address2,Billing Company,Billing City,Billing Zip,Billing Province,Billing Country,Billing Phone,Shipping Name,Shipping Street,Shipping Address1,Shipping Address2,Shipping Company,Shipping City,Shipping Zip,Shipping Province,Shipping Country,Shipping Phone,Notes,Note Attributes,Cancelled at,Payment Method,Payment Reference,Refunded Amount,Vendor,Outstanding Balance,Employee,Location,Device ID,Id,Tags,Risk Level,Source,Lineitem discount,Tax 1 Name,Tax 1 Value,Tax 2 Name,Tax 2 Value,Tax 3 Name,Tax 3 Value,Tax 4 Name,Tax 4 Value,Tax 5 Name,Tax 5 Value,Phone,Receipt Number,Duties,Billing Province Name,Shipping Province Name,Payment Terms Name,Next Payment Due At #1041,addres,pending,,unfulfilled,,yes,JPY,5500,0,0,5500,"",0,送料,2021-07-21 20:45:23 +0900,1,AAAA N,5500,,062906810,true,false,pending,name,**"Tokyo3-369, Tokyo2F"**,Tokyo3-369,Tokyo4F,,江東区,107-0000,JP-13,JP,'+81 00-0000-0000,00000000 : 111 ,"指定: なし 指定: 指定なし",,Ca"",0,A,30,,,,42348,"",Low,web,0,,,,,,,,,,,,,,東京都,東京都,,VBA
1Sub csv_import2() 2 File_path = Worksheets("Sheet3").Range("C3").Value 3 Debug.Print (File_path) 4 5 ' ファイル読み込み 6 MsgBox "ファイルを選択してください" 7 Dim buf As String, Target As String, i As Long 8 Dim records As Variant, items As Variant, j As Long 9 Dim Csv_Import_File ' Excelファイルに取り込むCSVファイルの名前を入れ込む変数 10 Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv") ' CSVファイルを選択する 11 12 13 With CreateObject("ADODB.Stream") 14 .charset = charset 15 .Open 16 .LoadFromFile Csv_Import_File 17 buf = .ReadText 18 .Close 19 records = Split(buf, "#") 20 headers = Split(records(0), ",") 21 22 ' header書き出し 23 For j = 0 To UBound(headers) 24 Worksheets(targetsheet).Cells(1, j + 1).Value = headers(j) 25 Next j 26 27 For i = 1 To UBound(records) 28 items = Split(records(i), ",") 29 For j = 0 To UBound(items) 30 If j = 0 And i <> 0 Then 31 Worksheets(targetsheet).Cells(i + 1, j + 1).Value = "#" + items(j) 32 Else 33 Worksheets(targetsheet).Cells(i + 1, j + 1).Value = Replace(items(j), """", "") 34 Worksheets(targetsheet).Cells(i + 1, j + 1).Value = Replace(items(j), " ", "") 35 End If 36 Next j 37 Call write_target(i, items, headers) 38 Next i 39 End With 40 41 Set ws = ThisWorkbook.Worksheets(targetsheet) 42 Call writeCsv(ws, ws.Range("A1")) '//ファイル保存 43End Sub
"Tokyo3-369, Tokyo2F" こちらの個所からずれが発生いたします ### 対応したこと ```VBA For i = 1 To UBound(records) items = Split(records(i), ",") For j = 0 To UBound(items) If j = 0 And i <> 0 Then Worksheets(targetsheet).Cells(i + 1, j + 1).Value = "#" + items(j) Else ' Worksheets(targetsheet).Cells(i + 1, j + 1).Value = Replace(items(j), """", "") Worksheets(targetsheet).Cells(i + 1, j + 1).Value = Split(Replace(replaceColon1(strLine), """", ""), ":") End If Next j Call write_target(i, items, headers) Next i
End With
やったこと
VBA
1Dim buf As String, Target As String, i As Long 2 Dim records As Variant, items As Variant, j As Long 3 Dim Csv_Import_File ' Excelファイルに取り込むCSVファイルの名前を入れ込む変数 4 Csv_Import_File = Application.GetOpenFilename("CSVファイル,*.csv") ' CSVファイルを選択する 5 6 MsgBox "先程選択した、データを選択してください" 7 With CreateObject("ADODB.Stream") 8 .charset = "Shift-JIS" 9 .Open 10 .LoadFromFile Csv_Import_File 11 buf = .ReadText 12 .Close 13 records = Split(buf, "#") 14 headers = Split(records(0), ",") 15 16 ' header書き出し 17 For j = 0 To UBound(headers) 18 Worksheets(targetsheet).Cells(1, j + 1).Value = headers(j) 19 Next j 20 21 'カンマをセミコロンに置換 22 buf = ReplaceSeparator(buf, ",", ";") 23 buf = Replace(buf, """", "") '引用符(")を削除 24 25 records = Split(buf, "#") '#で分割して配列に 26 For i = 0 To UBound(records) 27 If i > 0 Then records(i) = "#" & records(i) 28 items = Split(records(i), ";") 'セミコロンで分割して配列に 29 '配列をセル範囲に代入 30 Worksheets(1).Cells(i + 1, 1).Resize(, UBound(items) + 1).Value = items 31 Next 32 End With
教えていただいたURL参考に行いましたが、CSVの値がすべて消えてしまいます。
recordsの中身がない状態です
リンク内容
回答3件
あなたの回答
tips
プレビュー