回答編集履歴
1
コード追記
answer
CHANGED
@@ -8,4 +8,57 @@
|
|
8
8
|
CSVの仕様にそったファイルなら問題なく取り込めると思います。
|
9
9
|
ダブルクォーテーションで囲まれたカンマや改行は無視してくれます。
|
10
10
|
|
11
|
-
上記で正しく取り込めたら、マクロの起動で、同じ操作をしてVBAに変換して、それをもとに作成したらどうでしょう。
|
11
|
+
上記で正しく取り込めたら、マクロの起動で、同じ操作をしてVBAに変換して、それをもとに作成したらどうでしょう。
|
12
|
+
|
13
|
+
---
|
14
|
+
ファイルがCSVの仕様に沿ったものなら、上記の方法でうまくいくはずなんですが、
|
15
|
+
自前のコードでいくなら、下記のような方針でいくといいでしょう。
|
16
|
+
|
17
|
+
読み込んだテキスト全文のカンマを別の区切り文字(テキストに含まれていない文字)に置換する。ただし、引用符(")に囲まれている部分のカンマは置換しない。(自作関数)
|
18
|
+
|
19
|
+
その後、引用符(")を削除する(必要ならば)。
|
20
|
+
|
21
|
+
後は、テキストをレコード区切り文字で分割して配列にする。
|
22
|
+
今回のものだと行頭に#があるのでそれをレコード区切り文字とする。
|
23
|
+
|
24
|
+
レコード配列をループで順に読み込んで、置換した区切り文字で分割して配列にして、その配列をセル範囲に代入する。
|
25
|
+
|
26
|
+
上記の方針で作成したコード例
|
27
|
+
|
28
|
+
```vba
|
29
|
+
Sub csv_import3()
|
30
|
+
’前略 ファイル読み込み処理
|
31
|
+
|
32
|
+
Dim buf As String
|
33
|
+
buf = .ReadText
|
34
|
+
|
35
|
+
'カンマをセミコロンに置換
|
36
|
+
buf = ReplaceSeparator(buf, ",", ";")
|
37
|
+
buf = Replace(buf, """", "") '引用符(")を削除
|
38
|
+
|
39
|
+
Dim records, i As Long
|
40
|
+
records = Split(buf, "#") '#で分割して配列に
|
41
|
+
For i = 0 To UBound(records)
|
42
|
+
If i > 0 Then records(i) = "#" & records(i)
|
43
|
+
Dim items
|
44
|
+
items = Split(records(i), ";") ’セミコロンで分割して配列に
|
45
|
+
’配列をセル範囲に代入
|
46
|
+
Worksheets(1).Cells(i + 1, 1).Resize(, UBound(items) + 1).Value = items
|
47
|
+
Next
|
48
|
+
|
49
|
+
'後略
|
50
|
+
End Sub
|
51
|
+
|
52
|
+
'引用符(")で固まれた部分以外の区切り文字を置換する
|
53
|
+
Function ReplaceSeparator(s As String, Separator1 As String, Separator2 As String) As String
|
54
|
+
Dim ary
|
55
|
+
ary = Split(s, """")
|
56
|
+
|
57
|
+
Dim i As Long
|
58
|
+
For i = 0 To UBound(ary) Step 2
|
59
|
+
ary(i) = Replace(ary(i), Separator1, Separator2)
|
60
|
+
Next
|
61
|
+
|
62
|
+
ReplaceSeparator = Join(ary, """")
|
63
|
+
End Function
|
64
|
+
```
|