2017-07-06 2 views
0

私はVBAの新規ユーザーの中で、サイズの大きなテキストファイルを読み込もうとしています。場合によっては、いくつかのMBのサイズのテキストファイルもあります。VBAを使用してテキストファイルを読み込んで処理する際の問題

データは、異なるタイムスタンプで何らかの数値に対する印刷結果で構成されています。次のように

Iの値を格納する必要がタイムスタンプである:1.00を完了し

ステップ時間、合計時間は1.00

を完了し、以下のように印刷データがある:

90000354 1  -3.9630E-02 -3.5410E-02 -0.2695  0.4523  2.424  0.5630 

今、番号90000354を探して、これらの数字をコピーして、-3.9630E-02、-3.5410E-02 & -0.2695のExcelシートに貼り付ける必要があります。今、私はフォローコードを使用していますが、それは問題を提起しています。この問題を解決するのを手伝ってください。

事前に感謝します。

Option Explicit 

Private Sub CommandButton1_Click() 

Dim text As String, MyData As String, strData() As String, myFile As String, textLine As String 

Dim v As Variant 

Dim numIde As Long, i As Long 

myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat") 

Open myFile For Input As #1 

MyData = Space$(LOF(1)) 

Do Until EOF(1) 

    Line Input #1, textLine 

    MyData = MyData & textLine & vbCrLf 

Loop 

Close #1 

strData() = Split(MyData, vbCrLf) 

numIde = 90000354 

For i = LBound(strData) To UBound(strData) 

    If InStr(1, strData(i), numIde, vbTextCompare) Then 

     Cells(2, 2).Value = Mid(numIde, numIde + 20, 11) 

     Cells(2, 3).Value = Mid(numIde, numIde + 32, 11) 

     Cells(2, 4).Value = Mid(numIde, numIde + 44, 11) 

     Exit For 
    End If 
Next i 

End Subの次のようにコードがエラーになってしまっている実行

"実行時エラー '54':不正なファイルモード"

デバッグしようとしたときに、このコード行 "Get#1、MyData"で停止しています

+0

ニースの質問ができますが、それは誰かが –

+0

があなたの提案@Garyエバンスありがとうござい答えるのに役立ちますとき、あなたが取得しているか、エラーにより明示的なことができれば、あなたは、それが問題を与えている場所に関する情報を提供する必要があります。私はコードを実行した後に出力を追加するのを忘れていました。エラーは、 "実行時エラー '54':不正なファイルモード"です。デバッグしようとしている間、このコード行 "Get#1、MyData"で停止しています。 –

答えて

0

Getはバイナリデータを読み込み、テキストを読み取るためのものです。使用:Line Input

編集:これがうまくいくはずです。各行を読み、それを確認してください。あなたが希望する場合

ます。Private Sub CommandButton1_Click()

Dim text As String, MyData As String, strData() As String, myFile As String 
Dim numIde As Integer 
Dim i As Long 

numIde = 90000354 
myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat") 

Open myFile For Input As #1 

Do Until EOF(1) 
    Line Input #1, textline 
    If InStr(1, textline, numIde, vbTextCompare) Then 
     Cells(2, 2).Value = Mid(textline, numIde + 20, 11) 
     Cells(2, 3).Value = Mid(textline, numIde + 32, 11) 
     Cells(2, 4).Value = Mid(textline, numIde + 44, 11) 
    End If 
Loop 
Close #1 

などOSに応じて、またはのvbCrLfを認識しない場合があり split機能を気にすることは、このような何かを保存します。それが行われていたやり方では、以前に投稿したコードに若干の問題がありました。それは、新しい行として追加しないので、各行を1つの文字列に追加していたので、 Split()関数は機能しませんでした。ここで更新されたコードが動作するはずです。

Do Until EOF(1) 
Line Input #1, text 
    MyData = MyData & text & vbCrLf '<-need to append the vbCRLF 
Loop 
Close #1 
strData = Split(MyData, vbCrLf) 
+0

ありがとうございます。変更を実装した後は、エラーは発生しません。しかし、出力は空白です。助けてください。 –

+0

もう一度@ainwoodありがとうございます。私はコードを変更しましたが、今度は "Run-time error '9':Subscript out of range"という新しいエラーが発生しています。デバッグしようとすると、 "If"ループを指摘しています(コードの最後から6番目のライフ)。親切にチェックしてください。 –

+0

あなたの投稿を改訂コードで更新してください。 Instr()は、範囲外のエラーの下付き文字を与えるべきではありません。ミッドコードに入力したエラーが表示されます。「テキスト」をテキストラインに変更します。 – ainwood

関連する問題