回答編集履歴

2

コード例追加

2019/07/02 03:40

投稿

hatena19
hatena19

スコア33757

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

追記

2019/07/02 03:40

投稿

hatena19
hatena19

スコア33757

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回ですみ、それ以外はメモリ上の操作ですので高速になります。