VBAを使用してテキストドキュメントを解析し、テキストファイルで指定されたパスを返そうとしています。
たとえば、テキストファイルは次のようになります。
*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls
VBAに一度に1行をロードし、*
で始まる場合は、次の行に移動します(コメントされている行に似ています)。ファイルパスのある行については、そのパスをセルに書き込みます。最初のパスにはA2
、次のパスにはB2
などと言います。
私が答えたいと思っていた主なものは次のとおりです。
1。 VBAを使用してテキストファイルを読むための最良の/簡単な方法は何ですか?
2。行ごとにどうすればいいですか?
テキストファイルの最も基本的な読み取りには、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
TxtStreamを備えたFileSystemObjectがファイルを読み取る最も簡単な方法だと思います
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
次に、このtxtStream
オブジェクトを使用すると、(FreeFile()
メソッドを使用するのとは異なり)インテリセンスが取得するあらゆる種類のツールを使用できるため、当て推量が少なくなります。さらに、FreeFileを割り当てる必要はありません。割り当てたときから実際にまだFreeFileであることを願っています。
次のようなファイルを読み取ることができます。
Do While Not txtStream.AtEndOfStream
txtStream.ReadLine
Loop
txtStream.Close
注:これには、Microsoft Scripting Runtimeへの参照が必要です。
完全を期すために。メモリにロードされたデータを操作します。
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
このコードを使用して、テキストファイルの行ごとに読み取ることができます。また、最初の文字が「*」であることを確認してから、そのままにしておくこともできます。
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