• ベストアンサー

Excel VBAで読み込んだテキストから任意のデータを取得するには?

Excel VBAで外部テキストをTextBoxに読み込み、そのテキストの中から任意の場所の数値を取得する(変数に代入する)にはどのようにしたらいいのでしょうか? 例えば、外部テキストが以下のようなかんじだったとします。 ここから--------------------- ・・・ 通勤時間A root 60 root 120 root 45 root 225 root 30 通勤時間B root 90 root 150 root 75 ・・・ ここまで--------------------- このテキストの中から通勤時間Aを検索し、その下の行にある、60,120,45,225,30という数値を変数に代入したいのです。 テキストをTextBoxに読み込む方法はわかりますが、数値の検索方法がわかりません。どうすればいいでしょうか? (テキストをTextBoxに読み込まなくても数値を検索する方法があればそちらの方法もお願いします)。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.2

<C:\Temp\root_a.txt> root 60 root 120 root 45 root 225 root 30 こういうファイルがあったとします。 -------------- 60 120 45 225 30 -------------- と読み込んで表示するコードは次のようです。 Private Sub コマンド0_Click()   Dim strData As String      Debug.Print "--------------"   Do     strData = FileRead("C:\Temp\root_a.txt")     If strData <> "" Then       Debug.Print CutStr(strData, " ", 2)     End If   Loop Until strData = ""   Debug.Print "--------------" End Sub ここでは、ファイルを1行づつリードする関数 FileRead を使っています。 また、数字の抜き出しには CutStr 関数を使っています。 Public Function FileRead(ByVal FileName As String, Optional isStop As Boolean = False) As String On Error GoTo Err_FileRead   Static isOpen As Boolean   Static fso  As FileSystemObject   Static fil  As File   Static txs  As TextStream      If Not isOpen Then     isOpen = True     Set fso = New FileSystemObject     Set fil = fso.GetFile(FileName)     Set txs = fil.OpenAsTextStream(ForReading, TristateUseDefault)   End If   FileRead = txs.ReadLine Exit_FileRead:   If Len(FileRead) = 0 Or isStop Then     isOpen = False     Set txs = Nothing     Set fil = Nothing     Set fso = Nothing   End If   Exit Function Err_FileRead:   Resume Exit_FileRead End Function Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function

suffre
質問者

お礼

ありがとうございます。非常に参考になります。 コードをいただきましたが、調べながら解析しています。 いろいろな方法があるので勉強になりますね。

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

どういう構成、設計にしようとしているのかがさっぱり分からないのですが。 単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね?? 全然違うものを想定されているのでしょうか。 テキストボックスにまとめて取り込んで、改行マークを目印にしたりで、分割して配列に取り込んでなどの方法を考えたりもしましたが、もっと単純に分かりやすく、操作しやすい設計が幾らでも思いつくのですが。 とりあえずその想定に近いものを考えるなら、テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば、一行ずつの判定もしやすいですから、あとは条件別に仕分けるとかそんなイメージになりましたが。取り込んだあと検索するのではなく、取り込みの際にチェックするという方法。 http://www.officetanaka.net/excel/vba/filesystemobject/textstream.htm

suffre
質問者

お礼

ありがとうございます。 >単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね? なんとなくあっています。が、このへんはまだ未定なのでどのようにでもできると思うのですが、「テキストの数値の取得はどうやるのかな?」というところで悩んでおりました。 >テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば~(略) そのような方法があったのですね。一行ずつ判定していく方法は使えるかもです!しかも取り込みの際にチェックするのは2度手間がなくて良いですね。 先が見えてきました!URLを見て勉強させていただきます!

関連するQ&A