[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストデータから特定のデータのみを読み込む』(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)
(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)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.