teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コード例追加

2019/07/02 03:40

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -22,4 +22,41 @@
22
22
 
23
23
  二次元配列を、シートの指定範囲に代入します。
24
24
 
25
- 上記の方法にすれば、シートへのアクセスは1回ですみ、それ以外はメモリ上の操作ですので高速になります。
25
+ 上記の方法にすれば、シートへのアクセスは1回ですみ、それ以外はメモリ上の操作ですので高速になります。
26
+
27
+ ---
28
+ コメントにテキストデータ例が出たので、そこから必要データを取り出してセルに出力するコード例
29
+
30
+ テキストファイル C:\test\test.log
31
+ データ
32
+ ```text
33
+ . . 値 "AA"をダウンロードしています
34
+ . . 値 "AB"をダウンロードしています
35
+ . . 値 "AC"をダウンロードしています
36
+ . . 値 "AD"をダウンロードしています
37
+ ```
38
+
39
+ `値 "` と `"` の間のテキストを取り出して、A2セル以降に出力するコード例
40
+
41
+ ```vba
42
+ Public Sub テキストインポート()
43
+ Dim FSO As Object, Log As String
44
+ Set FSO = CreateObject("Scripting.FileSystemObject")
45
+ With FSO.GetFile("C:\test\test.log").OpenAsTextStream
46
+ Log = .ReadAll 'Log変数に全文読み込み
47
+ MsgBox buf
48
+ .Close
49
+ End With
50
+ Set FSO = Nothing
51
+
52
+ Dim ar As Variant
53
+ ar = Split(Log, vbCrLf) '改行で分割して一次元配列に変換
54
+
55
+ For i = LBound(ar) To UBound(ar)
56
+ ar(i) = Split(Split(ar(i), "値 """)(1), """")(0) '値 " と " の間を取り出す
57
+ Next
58
+
59
+ '一次元配列を2次元配列に変換してA2以降に出力
60
+ Range("A2").Resize(UBound(ar) + 1).Value = WorksheetFunction.Transpose(ar)
61
+ End Sub
62
+ ```

1

追記

2019/07/02 03:40

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -3,4 +3,23 @@
3
3
  とりあえず、下記を理解して、自分でできるとこまでコードを書いてください。
4
4
  話はそれからです。
5
5
 
6
- [VBA 高速化テクニック ~ 配列とセルの相互転記 - t-hom’s diary](https://thom.hateblo.jp/entry/2015/08/30/141854)
6
+ [VBA 高速化テクニック ~ 配列とセルの相互転記 - t-hom’s diary](https://thom.hateblo.jp/entry/2015/08/30/141854)
7
+
8
+ ---
9
+ 提示のコードをみても、
10
+ テキストデータがどのようなもので、それをどのようにしたいのか結局分かりませんので、
11
+ 概要を回答しておきます。
12
+
13
+ テキストファイルを1行ずつではなく、一気に読み込みます。
14
+ (1行ずつだと何行なのか分からないので、二次元配列のサイズを決定できないため)
15
+ FileSystemObjectのReadAllを使うといいでしょう。
16
+
17
+ 読み込んだテキストを、Split関数で改行で分割して配列にします。
18
+ Splitの配列は一次元配列なので、
19
+ 別にSplitの要素数×2列の二次元配列を確保します。
20
+
21
+ Splitの一次元配列をループで1行ずつ読み込んで、必要データを取り出して、二次元配列に格納します。
22
+
23
+ 二次元配列を、シートの指定範囲に代入します。
24
+
25
+ 上記の方法にすれば、シートへのアクセスは1回ですみ、それ以外はメモリ上の操作ですので高速になります。