62

VBA を使用してテキスト ドキュメントを解析し、テキスト ファイルで指定されたパスを返そうとしています。たとえば、テキスト ファイルは次のようになります。

*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls

VBA で一度に 1 行ずつロードし、a で始まる場合*は次の行に移動します (その行がコメントされているのと同様です)。A2ファイルパスのある行については、最初のパス、次のパスなど、そのパスをセルに書きたいと思いますB2

私が答えたいと思っていた主な事柄は次のとおりです。

  1. VBA を使用してテキスト ファイルを読み取る最も簡単な方法は何ですか?
  2. どうすれば行ごとにそれを行うことができますか?
4

5 に答える 5

79

テキストファイルの最も基本的な読み取りには、次を使用しますopen

例:

Dim FileNum As Integer
Dim DataLine As String

FileNum = FreeFile()
Open "Filename" For Input As #FileNum

While Not EOF(FileNum)
    Line Input #FileNum, DataLine ' read in data 1 line at a time
    ' decide what to do with dataline, 
    ' depending on what processing you need to do for each case
Wend

#著者のメモ - 追加をやめてください -close #FileNumコメントで対処されており、この回答の改善としては必要ありません

于 2012-07-17T18:48:56.800 に答える
50

ファイルを読み取る最も簡単な方法は、TxtStream を使用した FileSystemObject です。

Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)

次に、このtxtStreamオブジェクトを使用すると、(メソッドを使用する場合とは異なり) インテリセンスが取得するあらゆる種類のツールを使用FreeFile()できるため、当て推量が少なくなります。さらに、FreeFile を割り当てる必要はなく、割り当てたときから実際にまだ空いていることを願っています。

次のようなファイルを読み取ることができます。

Do While Not txtStream.AtEndOfStream
    txtStream.ReadLine
Loop
txtStream.Close

注: これには、Microsoft Scripting Runtime への参照が必要です。

于 2012-07-17T19:59:02.453 に答える
39

完全を期すために; メモリにロードされたデータの操作。

dim hf As integer: hf = freefile
dim lines() as string, i as long

open "c:\bla\bla.bla" for input as #hf
    lines = Split(input$(LOF(hf), #hf), vbnewline)
close #hf

for i = 0 to ubound(lines)
    debug.? "Line"; i; "="; lines(i)
next
于 2012-07-18T13:06:39.637 に答える
2

このコードを使用して、テキスト ファイルを 1 行ずつ読み取ることができます。また、最初の文字が「*」であることを確認してから、そのままにしておくこともできます。

Public Sub Test()

    Dim ReadData as String

    Open "C:\satheesh\myfile\file.txt" For Input As #1

    Do Until EOF(1) 
       Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions
    If Not Left(ReadData, 1) = "*" then
       '' you can write the variable ReadData into the database or file
    End If 

    Loop

    Close #1

End Sub
于 2012-12-26T17:09:02.070 に答える