Excel VBA質問箱 IV

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

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


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

【10992】テキストファイルの読み込み(処理速度効... Cat 04/2/22(日) 18:15 質問
【10996】Re:テキストファイルの読み込み(処理速度効... Kein 04/2/23(月) 0:45 回答
【10998】Re:テキストファイルの読み込み(処理速度効... とまと 04/2/23(月) 1:05 回答
【10999】Re:テキストファイルの読み込み(処理速度効... とまと 04/2/23(月) 1:08 回答
【11001】Re:テキストファイルの読み込み(処理速度効... Jaka 04/2/23(月) 10:31 回答
【11002】Re:テキストファイルの読み込み(処理速度効... とまと 04/2/23(月) 11:17 回答
【11017】Re:テキストファイルの読み込み(処理速度... Cat 04/2/24(火) 15:15 質問
【11020】Re:テキストファイルの読み込み(処理速度... アイエネス 04/2/24(火) 16:04 回答
【11024】Re:テキストファイルの読み込み(処理速度... Cat 04/2/24(火) 16:37 質問
【11026】Re:テキストファイルの読み込み(処理速度... アイエネス 04/2/24(火) 16:48 発言
【11041】Re:テキストファイルの読み込み(処理速度... Cat 04/2/24(火) 20:15 お礼

【10992】テキストファイルの読み込み(処理速度効...
質問  Cat  - 04/2/22(日) 18:15 -

引用なし
パスワード
   はじめまして。ここ数ヶ月程VBAの勉強を始めた者です。
表題の件で、ご質問致します。
過去ログで、類似項目を拝見しましたが解決策が
理解出来ません。よろしくお願いします。

【目的】
テキストファイル(Total:5万行)の中身を、
エクセルシートに貼り付ける。その際、処理速度
効率化を図る。

【動作環境】
Excel2000

【作成経過】
Sub Read()

  Dim wsPath As String
  Dim wsFile_Name As String
  Dim Y_count As long
  Dim myBuff As String

  wsPath = "C:\1\"
  wsFile_Name = "test.txt"
 
  Y_count = 1
  
  Open wsPath & wsFile_Name For Input As #1
  Do Until EOF(1)
    'テキストファイルを1行読込む
    Line Input #1, myBuff

    Worksheets("Sheet1").Cells(Y_count, 1) = myBuff
    Y_count = Y_count + 1
  
  Loop
  Close #1

End Sub

⇒ 上記のように、テキストファイルを1行毎に読み込み、貼り付ける
 コードにはたどり着きました。しかしファイルデータが5万行からあると
 処理速度が低下してしまいます。これらを改善したいと考えています。
  テキストファイルの中身をすべて選択して、エクセルシートに貼り付ける
 方法や、その他、いい方法がありましたらご教授お願いします。

  マクロの記録を試したのですが、解決策には至りません。

【10996】Re:テキストファイルの読み込み(処理速度...
回答  Kein  - 04/2/23(月) 0:45 -

引用なし
パスワード
   OpenText メソッドで開いて、Cells.Copy ThisWorkbook.Worksheets(1).Range("A1")
などとすればどうかな ?

【10998】Re:テキストファイルの読み込み(処理速度...
回答  とまと  - 04/2/23(月) 1:05 -

引用なし
パスワード
   ▼Cat さん、keinさん こんばんは

 作成してる間にkeinさんからレスが
 ちょうど同じことをしてたのでUPしておきます

OpenText メソッドで試してみました。
こちらの作成したテストデータではけっこう
速くファイルを開くことができました。
後はコピーなどして所定の位置に貼り付ければ
よいかと思います。

ところでファイルはカンマ区切りでしょうか?
違ったら自動記録してComma:=Trueのところを
書き換えてみてください。
FieldInfo:=Array(Array(1, 2))
のところはなくてもいいのかもしれないのですが
書いておくと速かったので乗せておきます。
見当違いならごめんなさい。


Sub read2()

  Dim wsPath As String
  Dim wsFile_Name As String

  wsPath = "C:\1\"
  wsFile_Name = "test.txt"
  
  Workbooks.OpenText _
    Filename:=wsPath & wsFile_Name, _
    DataType:=xlDelimited, _
    Comma:=True, _
    FieldInfo:=Array(Array(1, 2))

End Sub8888

【10999】Re:テキストファイルの読み込み(処理速度...
回答  とまと  - 04/2/23(月) 1:08 -

引用なし
パスワード
   あっ End Sub の後ろにごみが (^-^;
訂正しておきます。

Sub read2()

  Dim wsPath As String
  Dim wsFile_Name As String

  wsPath = "C:\1\"
  wsFile_Name = "test.txt"
  
  Workbooks.OpenText _
    Filename:=wsPath & wsFile_Name, _
    DataType:=xlDelimited, _
    Comma:=True, _
    FieldInfo:=Array(Array(1, 2))

End Sub

【11001】Re:テキストファイルの読み込み(処理速度...
回答  Jaka  - 04/2/23(月) 10:31 -

引用なし
パスワード
   こんにちは。

[#1910][#1911]
[#5244]

もみてね!

OpenTextで開いても、コピペにやっぱり時間が掛かると思います。
(計った事無いけど)

1910の方、フィールド数にもよりますが、

基本TBL行数 = 1000
 ↓
基本TBL行数 = 500 の方が、速かった。(15フィールド(列数)の場合)

列数が多いなら、200ぐらいに減らした方が良いです。

因みに、
1セルに入っている文字数が多いより少ない方が、
日本語より英数字の方が、速かったです。

Catさんの望みの速度には、程遠いいと思いますが...。

【11002】Re:テキストファイルの読み込み(処理速度...
回答  とまと  - 04/2/23(月) 11:17 -

引用なし
パスワード
   おはようございます。
何度もスミマセン。

朝テストしてみたのですがが、一度すべての列を文字列として
読み込んだほうが早いみたいです。

Array(1, 2)の 1 が列数を表してるので
適宜列数分だけ増やしてみてください。


Sub read3()

  Dim wsPath As String
  Dim wsFile_Name As String

  wsPath = "C:\1\"
  wsFile_Name = "test.txt"
 
  Workbooks.OpenText _
    Filename:=wsPath & wsFile_Name, _
    DataType:=xlDelimited, _
    Comma:=True, _
    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))

End Sub

【11017】Re:テキストファイルの読み込み(処理速度...
質問  Cat  - 04/2/24(火) 15:15 -

引用なし
パスワード
   ▼とまと さん:
cc:Keinさん、Jakaさん、

 皆様。ご教授ありがとうございます。
 とても勉強になりました。

 すみません。今度は下記の件で質問があります。
よろしくお願い致します。

【テキストファイルについて】
各行に21個のデータがあります。そのデータの区切り方
は2種類あります。

<1>.タブで区切られている場合
<2>.スペースで区切られている場合
※<1>.<2>.の混在は無い

例)
AAA1   BB1  CC1  DD1   EE1  FF1 GG1  HH1 ・・・・
AAA2   BB2  CC2  DD2   EE2  FF2 GG2  HH2 ・・・・
AAA3   BB3  CC3  DD3   EE3  FF3 GG3  HH3 ・・・・
AAA4   BB4  CC4  DD4   EE4  FF4 GG4  HH4 ・・・・

【要望】
これら<1>.<2>.どちらのテキストファイルを読み込んでも、
エクセルシート上で、連続した「1セルに、1データ」形で
貼り付けられるようにコーディングしたいと思います。

下記の教えに従って試してみましたが、
上手く実行しません。

よろしくお願い致します。

>Array(1, 2)の 1 が列数を表してるので
>適宜列数分だけ増やしてみてください。
>
>
>Sub read3()
>
>  Dim wsPath As String
>  Dim wsFile_Name As String
>
>  wsPath = "C:\1\"
>  wsFile_Name = "test.txt"
> 
>  Workbooks.OpenText _
>    Filename:=wsPath & wsFile_Name, _
>    DataType:=xlDelimited, _
>    Comma:=True, _
>    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))
>
>End Sub

【11020】Re:テキストファイルの読み込み(処理速度...
回答  アイエネス  - 04/2/24(火) 16:04 -

引用なし
パスワード
   こんにちは
横レスすいません

コードの「Comma:=True」を「Tab:=True,Space:=True」としてみてはいかがでしょうか?

>>
>>Sub read3()
>>
>>  Dim wsPath As String
>>  Dim wsFile_Name As String
>>
>>  wsPath = "C:\1\"
>>  wsFile_Name = "test.txt"
>> 
>>  Workbooks.OpenText _
>>    Filename:=wsPath & wsFile_Name, _
>>    DataType:=xlDelimited, _
>>    Comma:=True, _
>>    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))
>>
>>End Sub

【11024】Re:テキストファイルの読み込み(処理速度...
質問  Cat  - 04/2/24(火) 16:37 -

引用なし
パスワード
   ▼アイエネス さん:

説明不足ですみません。
下記の件は試してみましたが、連続した形で貼り付けられませんでした。

>コードの「Comma:=True」を「Tab:=True,Space:=True」としてみてはいかがでしょうか?
>>>Sub read3()
>>>
>>>  Dim wsPath As String
>>>  Dim wsFile_Name As String
>>>
>>>  wsPath = "C:\1\"
>>>  wsFile_Name = "test.txt"
>>> 
>>>  Workbooks.OpenText _
>>>    Filename:=wsPath & wsFile_Name, _
>>>    DataType:=xlDelimited, _
>>>    Comma:=True, _
>>>    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))
>>>
>>>End Sub

【11026】Re:テキストファイルの読み込み(処理速度...
発言  アイエネス  - 04/2/24(火) 16:48 -

引用なし
パスワード
   とまとさんの言われているように、FieldInfoは調整されましたか?

>
>説明不足ですみません。
>下記の件は試してみましたが、連続した形で貼り付けられませんでした。
>
とまとさん発言:
>Array(1, 2)の 1 が列数を表してるので
>適宜列数分だけ増やしてみてください。

【11041】Re:テキストファイルの読み込み(処理速度...
お礼  Cat  - 04/2/24(火) 20:15 -

引用なし
パスワード
   ▼アイエネス さん:
cc:とまと さん、Keinさん、Jakaさん、

 皆様、ご教授ありがとうございました。
 ようやく目的達成しました。

 最終的には、以下のようなかたちになりました。
FieldInfoは、そのままでした。

>>>  Workbooks.OpenText _
>>>    Filename:=wsPath & wsFile_Name, _
>>>    DataType:=xlDelimited, _
追加[1]  ConsecutiveDelimiter:=True, _
追加[2]  Tab:=True, _
追加[3]  Space:=True, _
修正[1]  Comma:=False, _
>>>    FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2))

本当にありがとうございました。

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