Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6159 / 13646 ツリー ←次へ | 前へ→

【46846】テキストファイルを順次読み込ませたい モスキート 07/2/18(日) 20:47 質問[未読]
【46847】Re:テキストファイルを順次読み込ませたい かみちゃん 07/2/18(日) 21:09 発言[未読]
【46851】Re:テキストファイルを順次読み込ませたい かみちゃん 07/2/18(日) 21:41 発言[未読]
【46853】Re:テキストファイルを順次読み込ませたい モスキート 07/2/19(月) 8:04 質問[未読]
【46859】Re:テキストファイルを順次読み込ませたい neptune 07/2/19(月) 10:22 発言[未読]
【46864】Re:テキストファイルを順次読み込ませたい モスキート 07/2/19(月) 12:13 質問[未読]
【46867】Re:テキストファイルを順次読み込ませたい neptune 07/2/19(月) 13:07 回答[未読]
【46876】Re:テキストファイルを順次読み込ませたい モスキート 07/2/19(月) 15:19 お礼[未読]
【46877】Re:テキストファイルを順次読み込ませたい Kein 07/2/19(月) 15:22 回答[未読]

【46846】テキストファイルを順次読み込ませたい
質問  モスキート  - 07/2/18(日) 20:47 -

引用なし
パスワード
   こんばんは。
今回、大量にあるテキストファイルを
エクセルに読み込ませていくことになり、
それを自動で処理してくれるマクロが必要になりました。
具体的な処理を説明しますと

まず一個目のテキストファイル全文をコピーアンドペーストでシートに貼り付け、
間を空けずにすぐ下のセルに二個目のテキストファイル全文を貼り付け、
また次のテキストファイルを間を空けずにすぐ下のセルに貼り付け…

を繰り返させたいのです。
例えばそのテキストファイルが5行のものだとすると形としては

      A    B
1   一個目の一行目
2   一個目の二行目
3   一個目の三行目
4   一個目の四行目
5   一個目の五行目
6   二個目の一行目
7   二個目の二行目
8   二個目の三行目
9   二個目の四行目
10   二個目の五行目
11   三個目の一行目
12   三個目の二行目
・      ・
・      ・
・      ・

このようにしてもらいたいのです。
実際に使うテキストファイルには5列1440行にスペース区切りで数値が書かれており、
ひとつのシートに読み込むテキストファイルは31個あります。
よろしくお願いします。

【46847】Re:テキストファイルを順次読み込ませたい
発言  かみちゃん  - 07/2/18(日) 21:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>まず一個目のテキストファイル全文をコピーアンドペーストでシートに貼り付け、
>間を空けずにすぐ下のセルに二個目のテキストファイル全文を貼り付け、
>また次のテキストファイルを間を空けずにすぐ下のセルに貼り付け…
>
>を繰り返させたい

そのテキストファイルは、5列1440行にスペース区切りで数値が書かれているとあるのですが、
例えばそのテキストファイルが5行のものだとすると形とは、1440行ということでいいのですか?
あと、ファイルが31個とありますが、その制限はどのようにされるつもりですか?
特定フォルダに対象とするテキストファイルを入れておき、そのフォルダにあるテキストファイル
はすべて処理するということでいいですか?
その場合、ファイル数が46個以上になると、Excel2003までは、46×1440=66240で最大行を超えて
しまいますがそのあたりはどのようにされるつもりですか?

一応、以下に参考となると思われるURLを紹介させていただきます。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
http://www.officetanaka.net/excel/vba/filesystemobject/index.htm

【46851】Re:テキストファイルを順次読み込ませたい
発言  かみちゃん  - 07/2/18(日) 21:41 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>まず一個目のテキストファイル全文をコピーアンドペーストでシートに貼り付け、
>間を空けずにすぐ下のセルに二個目のテキストファイル全文を貼り付け、
>また次のテキストファイルを間を空けずにすぐ下のセルに貼り付け…
>
>を繰り返させたい

とりあえず、以下のような感じでできると思います。

Sub Sample()
 Dim FSO As Object
 Dim Fl As Object
 Dim buf As String
 Dim vntData As Variant
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 For Each Fl In FSO.GetFolder(ThisWorkbook.Path).Files
  '拡張子がTXTの場合
  If UCase(FSO.GetExtensionName(Fl.Path)) = "TXT" Then
   With FSO.GetFile(Fl.Path).OpenAsTextStream
    buf = .ReadAll
    vntData = Split(buf, vbCrLf)
    Cells(Rows.Count, 1).End(xlUp).Offset(1) _
     .Resize(UBound(vntData)) = Application.Transpose(vntData)
    .Close
    Erase vntData
   End With
  End If
 Next
 'スペース区切り
 Columns("A:A").TextToColumns Range("A1"), xlDelimited, True, True, False, True, True, True
End Sub

【46853】Re:テキストファイルを順次読み込ませたい
質問  モスキート  - 07/2/19(月) 8:04 -

引用なし
パスワード
    ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>まず一個目のテキストファイル全文をコピーアンドペーストでシートに貼り付け、
>>間を空けずにすぐ下のセルに二個目のテキストファイル全文を貼り付け、
>>また次のテキストファイルを間を空けずにすぐ下のセルに貼り付け…
>>
>>を繰り返させたい
>
>そのテキストファイルは、5列1440行にスペース区切りで数値が書かれているとあるのですが、
>例えばそのテキストファイルが5行のものだとすると形とは、1440行ということでいいのですか?
>あと、ファイルが31個とありますが、その制限はどのようにされるつもりですか?
>特定フォルダに対象とするテキストファイルを入れておき、そのフォルダにあるテキストファイル
>はすべて処理するということでいいですか?
>その場合、ファイル数が46個以上になると、Excel2003までは、46×1440=66240で最大行を超えて
>しまいますがそのあたりはどのようにされるつもりですか?
>
>一応、以下に参考となると思われるURLを紹介させていただきます。
>http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html
>http://www.officetanaka.net/excel/vba/filesystemobject/index.htm

レスありがとうございます。
説明不足だったようで、すいませんでした。
補足させていただきますと、
実際に私が使うことになるテキストファイルの、最初の5行をそのままコピペしますが

0; 0    0    0   0.0   0.0
0; 1    0    0   0.0   0.0
0; 2    0    1   0.2  129.0
0; 3    0    0   0.0   0.0
0; 4    0    2   0.5  103.2

このようになっており、これが1440行まで続いています。
ちなみに一番左の列は時間を表しており、
これが23:59まで続いているので1440行になっています。
また、31個と書きましたが
1個のテキストファイルに1日分のデータが書かれています。
これが月毎のフォルダに分けられているので
1つのフォルダの中に入っているtxtファイルの数は28個、30個、31個の3通りのみ。
また、1つのシートに1つのフォルダ分のtxtファイルだけをコピペしたいので
エクセルの最大行を超えてしまうことは有り得ないはずです。
紹介されたURLを、別のレスで書いていただいたプログラムと照らし合わせて読み、自分なりに書き換えてみましたが、どうしてもエラーが出て動きませんでした。
その時のエラーメッセージは「400」でした。
私には意味はわかりませんでしたが…
すいませんがもう少しだけ詳しく、プログラムの各部位が何を表しているかを
教えていただけないでしょうか?
よろしくお願いします。

【46859】Re:テキストファイルを順次読み込ませたい
発言  neptune  - 07/2/19(月) 10:22 -

引用なし
パスワード
   ▼モスキート さん:
こんにちは
横から失礼します。

>紹介されたURLを、別のレスで書いていただいたプログラムと照らし合わせて読み、自分なりに書き換えてみましたが、どうしてもエラーが出て動きませんでした。
>その時のエラーメッセージは「400」でした。
>私には意味はわかりませんでしたが…
どのようなプログラムで、どのような場所で出たか、 400と共に
その説明も表示されたはずですが、その情報も必要です。

>すいませんがもう少しだけ詳しく、プログラムの各部位が何を表しているかを
>教えていただけないでしょうか?
>よろしくお願いします。
ご自分でどこまで理解に勤めましたか?理解できない部分を訊ねましょう。
サンプルをもらったのだから極力自分での理解に勤めましょう。
 書いた人は簡単に利用するためのプログラムを書いたのではなく、勉強の
元となるものを書いてくれたのですから。
 で、なければ細かく理解せずにその後何らかの変更が必要になった
場合、困るのはあなたです。

【46864】Re:テキストファイルを順次読み込ませたい
質問  モスキート  - 07/2/19(月) 12:13 -

引用なし
パスワード
   ▼neptune さん:
>▼モスキート さん:
>こんにちは
>横から失礼します。
>
>>紹介されたURLを、別のレスで書いていただいたプログラムと照らし合わせて読み、自分なりに書き換えてみましたが、どうしてもエラーが出て動きませんでした。
>>その時のエラーメッセージは「400」でした。
>>私には意味はわかりませんでしたが…
>どのようなプログラムで、どのような場所で出たか、 400と共に
>その説明も表示されたはずですが、その情報も必要です。
>
>>すいませんがもう少しだけ詳しく、プログラムの各部位が何を表しているかを
>>教えていただけないでしょうか?
>>よろしくお願いします。
>ご自分でどこまで理解に勤めましたか?理解できない部分を訊ねましょう。
>サンプルをもらったのだから極力自分での理解に勤めましょう。
> 書いた人は簡単に利用するためのプログラムを書いたのではなく、勉強の
>元となるものを書いてくれたのですから。
> で、なければ細かく理解せずにその後何らかの変更が必要になった
>場合、困るのはあなたです。


レスありがとうございます。
少々他力本願の姿勢が出てしまっていたようなので反省します。

まず「400」のエラーメッセージですが、
そのメッセージボックスには「400」だけしか書かれていなかったです。
ただ、かみちゃんさんに書いていただいたプログラムを
念のためもう一回、そのままコピペして動かしてみたところ
意図したファイルではありませんでしたが
狙い通りの処理がされました。
デスクトップに置いてある白紙のエクセルファイルにマクロを書いて動かしたところ
デスクトップに放置してあったテキストファイルが読み込まれていたようでした。

なお、かみちゃんさんから紹介していただいたサイトと
私が勉強に見ているサイトも見ながらサンプルを見直していましたが
8行目の

For Each Fl In FSO.GetFolder(ThisWorkbook.Path).Files


10行目と11行目の
  If UCase(FSO.GetExtensionName(Fl.Path)) = "TXT" Then
   With FSO.GetFile(Fl.Path).OpenAsTextStream

の.Pathのところがよくわかりませんでした。
ここはどのように変えれば良かったのでしょうか?
読み込むテキストファイルがまとめてあるフォルダの場所を
任意のフォルダに変えたいのですが
任意のフォルダのアドレスを10行目と11行目のFL.Pathと入れ替えても
読み込まれませんでした。

【46867】Re:テキストファイルを順次読み込ませたい
回答  neptune  - 07/2/19(月) 13:07 -

引用なし
パスワード
   ▼モスキート さん:
>For Each Fl In FSO.GetFolder(ThisWorkbook.Path).Files
>
>と
>10行目と11行目の
>  If UCase(FSO.GetExtensionName(Fl.Path)) = "TXT" Then
>   With FSO.GetFile(Fl.Path).OpenAsTextStream
>
>の.Pathのところがよくわかりませんでした。

h t tp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/jsFSOTutor.asp
h t tp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/sgfilesystemobjects.asp
にHelpがありますから調べられます。以下抜粋ですが、

GetFolder メソッド
指定されたパスに置かれているフォルダに対応する Folder オブジェクトを返します。
ThisWorkbook.Pathプロパティ
指定されたオブジェクトの絶対パスを表す文字列を返します。
ThisWorkbookとはこのプログラムが書かれているBookを指します。(この行neptune)

GetExtensionName メソッド
指定されたパスの拡張子を表す文字列を返します。

GetFile メソッド
指定されたパスに置かれているファイルに対応する File オブジェクトを返します。

OpenAsTextStream メソッド
指定したファイルを開き、開いたファイルの読み取り、または追加書き込みに使用できる TextStream オブジェクトを返します。

>ここはどのように変えれば良かったのでしょうか?
多分上記のメソッド類が実行している処理が理解できれば、わかると思います。
(すみません。前のほうを読んでないもので、考えてません)
ど〜しても判らなければまた言って下さい。前のほうも読んで見ます。

【46876】Re:テキストファイルを順次読み込ませたい
お礼  モスキート  - 07/2/19(月) 15:19 -

引用なし
パスワード
   かみちゃんさん、neptuneさん、ありがとうございました。
色々試行錯誤した結果、
無事に自分がイメージした通りの処理をしてくれる
マクロができあがりました。
とても感謝しております。
本当にありがとうございました。

【46877】Re:テキストファイルを順次読み込ませたい
回答  Kein  - 07/2/19(月) 15:22 -

引用なし
パスワード
   >読み込むテキストファイルがまとめてあるフォルダの場所を
>任意のフォルダに変えたい
まずフォルダー選択ダイアログを、以下のようにして出します。

Dim ff As Object
Dim MyFol As String

Set ff = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0)
If ff Is Nothing Then Exit Sub
MyFol = ff.Items.Item.Path
Set ff = Nothing

そして

For Each Fl In FSO.GetFolder(MyFol).Files

というように、取得したパスを渡せば良いでしょう。

6159 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free