『テキストデータから特定のデータのみを読み込む』(VBA初心者) 下記のようなタブで区切られたテキストデータがあり、 @テキストファイルを選択。 AD・E・F列の3行目以降のデータを読み込む ということは出来ないでしょうか? どなたかご教授願います。 A B C D E F 1 0061111 000 000000 00000 00000 00000 2 0065575 000 000000 00000 00000 00000 3 0020105 000 000433 00040 00023 00001 4 0045793 000 001120 00001 00153 00002 5 0088261 000 032333 00005 01111 00089 ---- 全部読み取って、1:2行目/A:C列を削除 でもよさそうな... Sub test() Dim a(), n As Long, fn As String, txt As String, x, y, maxCol As Integer fn = "c:\test.txt" '<- 要変更 temp = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll x = Split(temp, vbCrLf) ReDim a(1 To UBound(x) + 1, 1 To Columns.Count) For i = 2 To UBound(x) y = Split(x(i),vbTab) If UBound(y) > 2 Then n = n + 1 For ii = 3 To UBound(y) a(n, ii - 2) = y(ii) Next maxCol = Application.Max(maxCol, UBound(y) + 1) End If Next ThisWorkbook.Sheets(1).Range("a1").Resize(n,maxCol).Value = a End Sub (seiya) ---- 私のエクセルは、97ですので、多少操作が異なるかもしれませんが、 ファイル、開く、ファイル指定、開くボタンクリック、取り込み開始行指定、次へ、次へとして、 各列のデータ形式で文字列をONにして、OKとするのですが、なにか不具合があるのでしょうか?(6UP) ---- (seiya)さんありがとうございました。 試してみたら、"実行時エラー9"とでてしまいます。 なぜなのでしょうか? それと、できれば解説もお願いします。 (VBA初心者) ---- 変更箇所は正しく変更されていますか? 実行時エラー9 (Subscript Out Of Range) ? 括弧の中の文字列が見当たらない、というようなことです。 (seiya) ---- (6UP)さんに追加、 不要な列は削除してやれば、簡単かと思います。 これで意味が解ります?(データ形式を指定する時) BJ ---- c:\test.txt←これをかえるんですね。 そのままにしてました。 かえたら今度は実行時エラー1004とでました・・・ (6UP)さんとBJさんへ 手作業で取り込めばいいのではないかというご意見でしょうか? (VBA初心者) ---- そのように回答差し上げています。        (6UP) ---- > かえたら今度は実行時エラー1004とでました・・・ どの行でエラーが出ますか? 手作業で読み込んで、マクロの記録をしたほうがよいと思いますが? (seiya) ---- ThisWorkbook.Sheets(1).Range("a1").Resize(n,maxCol).Value = a でエラ−が出ます。 (VBA初心者) ---- マクロの自動記録で試してみようと思います。 (VBA初心者) ---- > ThisWorkbook.Sheets(1).Range("a1").Resize(n,maxCol).Value = a > でエラ−が出ます。 ということは、nが0だということでしょう。 Tab 区切りのテキストファイルですか? そおでなければ y = Split(x(i),vbTab) の vbTab の部分を変更する必要があります。 (seiya) ---- スペースで区切られたファイルでした。 なので、 y = Split(x(i),Chr(32)) に直してやってみたらできました。 このマクロに関してなんですが、 今回はテキストAのスペースで区切られた6つの項目のデータを取り込みました。 このテキストAと同じようにスペースで区切られた6つの項目があるテキストBのデータを 取り込むことはできますか? [テキストA] A B C D E F 1 0061111 000 000000 00000 00000 00000 2 0065575 000 000000 00000 00000 00000 3 0020105 000 000433 00040 00023 00001 4 0045793 000 001120 00001 00153 00002 5 0088261 000 032333 00005 01111 00089 [テキストB] A B C D E F 1 477 XXX 000 00000 00000 00000 2 477 HDX 000 00000 00000 00000 3 477 HDX 433 00040 00023 00001 4 477 XXX 120 00001 00153 00002 5 488 GBX 333 00005 01111 00089 (VBA初心者) ---- fn を テキストBのファイル名に変更して試しましたか? (seiya) ---- いくつかのファイルでファイル名を変えて試してみましたが、 できるものとできないものがあります。 できなかったテキストデータは以下のような内容で、 スペースで区切られていることも確認しました。 何が原因なんでしょうか? 0065C561 ??? 00000000 00000000 00000000 00000000 0065C575 ??? 00000001 000001FE 00000265 000001E8 (VBA初心者) ---- どのようにできなかったのでしょう? その辺を詳しく説明してもらわないと、こちらにはさっぱりわかりません。 (seiya) ---- "実行時エラー1004" ThisWorkbook.Sheets(1).Range("a1").Resize(n,maxCol).Value = a でエラ−が出ました。 (VBA初心者) ---- 行数・列数・区切り文字等がどのようになったものですか? 3行目/4列目から読み始めるので 3行に満たない、または4列以上無いファイルではそのままでは読み込めませんよ? (seiya) ---- 行数:32行 列数:6列 区切り文字:スペース(←コードを確認しました。) です。 試しに新しいテキストブックにエラーとなったテキストの内容をコピペしたら エクセルに読み込むことができました。 こんなことってあるんですか? (VBA初心者) ---- > 試しに新しいテキストブックに... ^^^^^^^^^^^^^ 私にはわかりません。 (seiya) ---- エラーとなるファイルをEmEditorで開いて名前をつけて保存としたとき、 ファイルの種類、エンコードの選択のほかに改行方法というのがありました。 もとは" LFのみ(UNIX)"となっていて、これを"CR+LF(Windows)"にして保存したテキストファイルの読み込みはできました。 これは解決策のヒントになるでしょうか? この問題についてはとりあえず、おいといて・・・ ファイル指定について ファイルを指定していましたが、 これをどのファイルでも選択できるようにできないかと・・・ http://officetanaka.net/excel/vba/file/file02.htmを参考にして 自分でこんな感じに作ってみました。 Sub test1() Dim a(), n As Long, fn As String, txt As String, x, y, maxCol As Integer fn = Application.GetOpenFilename("テキストファイル,*.txt") If OpenFileName <> "False" Then     temp = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll     x = Split(temp, vbCrLf)     ReDim a(1 To UBound(x) + 1, 1 To Columns.Count)     For i = 2 To UBound(x)     y = Split(x(i), Chr(32))     If UBound(y) > 2 Then     n = n + 1     For ii = 3 To UBound(y)     a(n, ii - 2) = y(ii)     Next     maxCol = Application.Max(maxCol, UBound(y) + 1)     End If     Next     ThisWorkbook.Sheets(1).Range("a1").Resize(n, maxCol).Value = a   End If End Sub やりたいはできていますが、これでいいの?と思っています。 (VBA初心者) ---- それでしたら Chr(9) または chr(160) とかで試してみてください。 (seiya) ---- Chr(9) と chr(160)で試してみましたが、できませんでした。 (VBA初心者) ---- これで試してください。 Sub test() Dim a(), n As Long, fn As String, txt As String, x, y, maxCol As Integer fn = "c:\test.txt" '<- 要変更 temp = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll With CreateObject("VBScript.RegExp") .Pattern = "[\f\n\r\v]" .Global = True txt = .replace(txt, vbCrLf) .Pattern = "\n{2,}" txt = .replace(txt, vbCrLf) End With x = Split(temp, vbCrLf) ReDim a(1 To UBound(x) + 1, 1 To Columns.Count) For i = 2 To UBound(x) y = Split(x(i),vbTab) If UBound(y) > 2 Then n = n + 1 For ii = 3 To UBound(y) a(n, ii - 2) = y(ii) Next maxCol = Application.Max(maxCol, UBound(y) + 1) End If Next ThisWorkbook.Sheets(1).Range("a1").Resize(n,maxCol).Value = a End Sub (seiya)