回答編集履歴
2
コード例追加
test
CHANGED
@@ -47,3 +47,77 @@
|
|
47
47
|
|
48
48
|
|
49
49
|
上記の方法にすれば、シートへのアクセスは1回ですみ、それ以外はメモリ上の操作ですので高速になります。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
---
|
54
|
+
|
55
|
+
コメントにテキストデータ例が出たので、そこから必要データを取り出してセルに出力するコード例
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
テキストファイル C:\test\test.log
|
60
|
+
|
61
|
+
データ
|
62
|
+
|
63
|
+
```text
|
64
|
+
|
65
|
+
. . 値 "AA"をダウンロードしています
|
66
|
+
|
67
|
+
. . 値 "AB"をダウンロードしています
|
68
|
+
|
69
|
+
. . 値 "AC"をダウンロードしています
|
70
|
+
|
71
|
+
. . 値 "AD"をダウンロードしています
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
`値 "` と `"` の間のテキストを取り出して、A2セル以降に出力するコード例
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
```vba
|
82
|
+
|
83
|
+
Public Sub テキストインポート()
|
84
|
+
|
85
|
+
Dim FSO As Object, Log As String
|
86
|
+
|
87
|
+
Set FSO = CreateObject("Scripting.FileSystemObject")
|
88
|
+
|
89
|
+
With FSO.GetFile("C:\test\test.log").OpenAsTextStream
|
90
|
+
|
91
|
+
Log = .ReadAll 'Log変数に全文読み込み
|
92
|
+
|
93
|
+
MsgBox buf
|
94
|
+
|
95
|
+
.Close
|
96
|
+
|
97
|
+
End With
|
98
|
+
|
99
|
+
Set FSO = Nothing
|
100
|
+
|
101
|
+
|
102
|
+
|
103
|
+
Dim ar As Variant
|
104
|
+
|
105
|
+
ar = Split(Log, vbCrLf) '改行で分割して一次元配列に変換
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
For i = LBound(ar) To UBound(ar)
|
110
|
+
|
111
|
+
ar(i) = Split(Split(ar(i), "値 """)(1), """")(0) '値 " と " の間を取り出す
|
112
|
+
|
113
|
+
Next
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
'一次元配列を2次元配列に変換してA2以降に出力
|
118
|
+
|
119
|
+
Range("A2").Resize(UBound(ar) + 1).Value = WorksheetFunction.Transpose(ar)
|
120
|
+
|
121
|
+
End Sub
|
122
|
+
|
123
|
+
```
|
1
追記
test
CHANGED
@@ -9,3 +9,41 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
[VBA 高速化テクニック ~ 配列とセルの相互転記 - t-hom’s diary](https://thom.hateblo.jp/entry/2015/08/30/141854)
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
---
|
16
|
+
|
17
|
+
提示のコードをみても、
|
18
|
+
|
19
|
+
テキストデータがどのようなもので、それをどのようにしたいのか結局分かりませんので、
|
20
|
+
|
21
|
+
概要を回答しておきます。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
テキストファイルを1行ずつではなく、一気に読み込みます。
|
26
|
+
|
27
|
+
(1行ずつだと何行なのか分からないので、二次元配列のサイズを決定できないため)
|
28
|
+
|
29
|
+
FileSystemObjectのReadAllを使うといいでしょう。
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
読み込んだテキストを、Split関数で改行で分割して配列にします。
|
34
|
+
|
35
|
+
Splitの配列は一次元配列なので、
|
36
|
+
|
37
|
+
別にSplitの要素数×2列の二次元配列を確保します。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
Splitの一次元配列をループで1行ずつ読み込んで、必要データを取り出して、二次元配列に格納します。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
二次元配列を、シートの指定範囲に代入します。
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
上記の方法にすれば、シートへのアクセスは1回ですみ、それ以外はメモリ上の操作ですので高速になります。
|