Excel VBA質問箱 IV

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

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


43394 / 76732 ←次へ | 前へ→

【38387】Re:テキストファイルの高速読込み
回答  neptune  - 06/6/1(木) 14:42 -

引用なし
パスワード
   ▼aya さん:
最初にお詫びですが、aya さんの作業するファイルは恐らく固定長ファイル
ではありません。固定長ファイルには行という概念はありません。
1レコード(サイズ)で管理します。従って、1行ずつ読込むと
言うことはできません。
私の頭から抜けていたので、aya さんの説明とソースが違うと言うことに
気が付きませんでした。

>これを実現できたらなとは思っていますが、どうすればいいかわかりません。
お詫びに手持ちの関数をUPしときます。
Public Function ReadFile(psPath As String) As String
'//////////////////////////////////////////////////////
'ReadFile:該当するファイルのText全てを返す
'-------------------------------------
'引数
'psPath   :読み込むファイルのフルパス
'-------------------------------------
'戻り値:該当するファイルのText全てを返す。失敗時 "" を返す
'//////////////////////////////////////////////////////
Dim fnum As Long
Dim sPath As String
Dim sData As String
Dim fSize As Long
Dim bytBuf() As Byte

  On Error GoTo ErrorHandler
  sPath = psPath
  fSize = FileLen(sPath)
  ReDim bytBuf(fSize)
  fnum = FreeFile()
  Open sPath For Binary As #fnum
  Get #fnum, , bytBuf()
  Close #fnum
  
  sData = StrConv(bytBuf, vbUnicode)
  Erase bytBuf
  sData = Left(sData, InStr(1, sData, Chr(0)) - 1)
  ReadFile = sData
  
  Exit Function
ErrorHandler:
  Close
  ReadFile = ""
End Function

使い方
固定長ではなさそうなので改行毎に1行ずつに分解してます。
恐らくカンマ区切りのCSV形式では?
Sub t()
Dim sText As String
Dim sDatas() As String
  'sText に全てのテキストが返ってきます
  sText = ReadFile("D:\hoge\hoge.txt")
  'sDatas()に1行ごとに分割されます。
  sDatas = Split(sText, vbCrLf)  
End Sub

>配列に1行ずつ読み込んで、その後処理をさせるという意味でしょうか?
そうです。どうもカンマ区切りファイルのようですから、上の使い方のsDatas
の配列をそれぞれカンマ毎にもう一度分解したら、処理がやりやすくなる
(判断回数が減る)のではないですか?分解と言う処理は増えますけど。

>1行の中には不必要なデータがたくさんありすぎて、処理が複雑になってしまっているのが現状です。
>その処理をした後また配列に値を入れて、最後にセルに書き込みという処理を行う方が速いのでしょうか?
おそらくそう思います。

処理後、ぺたぺたとセルに貼り付けていくといいと思います。
但し、セルへのアクセスは最小限にしなければ効果は薄いです。
この辺はJakaさんのやり方を参考にしてください。

4 hits

【38243】テキストファイルの高速読込み aya 06/5/30(火) 15:29 質問
【38244】Re:テキストファイルの高速読込み 06/5/30(火) 15:44 回答
【38245】Re:テキストファイルの高速読込み aya 06/5/30(火) 15:55 発言
【38246】Re:テキストファイルの高速読込み Jaka 06/5/30(火) 16:00 発言
【38247】Re:テキストファイルの高速読込み Jaka 06/5/30(火) 16:07 発言
【38375】Re:テキストファイルの高速読込み aya 06/6/1(木) 9:59 質問
【38249】Re:テキストファイルの高速読込み Kein 06/5/30(火) 16:13 発言
【38376】Re:テキストファイルの高速読込み aya 06/6/1(木) 10:01 発言
【38386】Re:テキストファイルの高速読込み Kein 06/6/1(木) 14:41 回答
【38388】Re:テキストファイルの高速読込み Kein 06/6/1(木) 14:43 発言
【38254】Re:テキストファイルの高速読込み neptune 06/5/30(火) 17:21 回答
【38268】Re:テキストファイルの高速読込み ichinose 06/5/30(火) 19:56 発言
【38287】Re:テキストファイルの高速読込み neptune 06/5/30(火) 23:10 発言
【38288】Re:テキストファイルの高速読込み neptune 06/5/30(火) 23:20 発言
【38377】Re:テキストファイルの高速読込み aya 06/6/1(木) 10:16 質問
【38402】Re:テキストファイルの高速読込み ichinose 06/6/1(木) 23:09 発言
【38378】Re:テキストファイルの高速読込み aya 06/6/1(木) 10:23 質問
【38387】Re:テキストファイルの高速読込み neptune 06/6/1(木) 14:42 回答
【38389】Re:テキストファイルの高速読込み aya 06/6/1(木) 15:50 発言
【38391】Re:テキストファイルの高速読込み neptune 06/6/1(木) 17:54 回答
【38392】Re:テキストファイルの高速読込み neptune 06/6/1(木) 18:52 発言

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