Excel VBA質問箱 IV

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

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


30109 / 76738 ←次へ | 前へ→

【51899】Re:テキストファイルを高速で読み込む
発言  Jaka  - 07/10/10(水) 9:31 -

引用なし
パスワード
   すみません。
不覚にも気づかずに提示されたコードをそのまま使ってしまいました。
1部修正して、そのまま同じものを再アップ。
前のコードをそのまま利用すると、
「なぜ私のPCだけ? Why?」ってな事になります。

予約語を変数やプロシジャー名に使うと上記のようなことになったりするし、誤動作する場合があるかもも知れないので止めましょう。

MsgBox ActiveSheet.Name  .Nameとならずに.nameになる場合も...。
直し方を知っていたり、気にしなければ良いですけど。

で、修正点
Const name → Const name_1

以下前のまま。

遅い原因は、これ。
Cells(r, 1).Value = strREC
1行読んでは書き込む、と言った感じで1行づつ処理しているからです。
ある程度配列に溜め込んでから書き出すようにすると、現状よりかなり速くなりますよ。

注)
Preserveしながら、1行づつ配列を拡張しても良いですが、1次元配列だから書き込み時にTransposeさせないといけません。
Transposeできる配列の要素数の上限が、5461個までそれ以上になるとエラーになります。


  Const name_1 = "C:\test.log"
  Dim intFF As Integer      ' FreeFile値
  Dim r As Long
  Dim strREC As String
  Dim 配列() As String
  intFF = FreeFile
 
  Open name_1 For Input As #intFF
 
  Do Until EOF(intFF)
    Line Input #intFF, strREC
    r = 1 + r
    ReDim Preserve 配列(1 To 1, 1 To r)
    配列(1, r) = strREC
  Loop
  Range("A1").Resize(UBound(配列, 2)).Value = Application.Transpose(配列)
  Close #intFF
  Erase 配列


他、だいぶ前に書いた奴。
コードが長すぎて、参考にはならないと思いますが。
HTTP://www.vbalab.net/vbaqa/data/excel/log/tree_373.htm#1910

コピペする場合の注意点
HTTP://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=1464;id=


>仕事場で使用しているノートPCがあまり高スペックとはいえない為、
>読み込む速度は1度に約5〜6分で最悪フリーズしてしまうこともあります。
現時点(2007/10現在)で、「あまり高スペックとはいえない」となると結構なスペックだと思います。
参考まで、現在のPCスペック10年ぐらい前の K6-2 の500MHz/256MB。

0 hits

【51766】テキストファイルを高速で読み込む ノリ 07/10/4(木) 7:20 質問
【51768】Re:テキストファイルを高速で読み込む ちん 07/10/4(木) 7:55 発言
【51769】Re:テキストファイルを高速で読み込む ハチ 07/10/4(木) 9:29 発言
【51800】Re:テキストファイルを高速で読み込む ノリ 07/10/5(金) 8:07 お礼
【51899】Re:テキストファイルを高速で読み込む Jaka 07/10/10(水) 9:31 発言
【51906】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 19:09 回答
【51909】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 20:43 発言
【51910】Re:テキストファイルを高速で読み込む Hirofumi 07/10/10(水) 20:52 発言

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