- ベストアンサー
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に読み込まなくても数値を検索する方法があればそちらの方法もお願いします)。
- みんなの回答 (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
その他の回答 (1)
- popesyu
- ベストアンサー率36% (1782/4883)
どういう構成、設計にしようとしているのかがさっぱり分からないのですが。 単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね?? 全然違うものを想定されているのでしょうか。 テキストボックスにまとめて取り込んで、改行マークを目印にしたりで、分割して配列に取り込んでなどの方法を考えたりもしましたが、もっと単純に分かりやすく、操作しやすい設計が幾らでも思いつくのですが。 とりあえずその想定に近いものを考えるなら、テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば、一行ずつの判定もしやすいですから、あとは条件別に仕分けるとかそんなイメージになりましたが。取り込んだあと検索するのではなく、取り込みの際にチェックするという方法。 http://www.officetanaka.net/excel/vba/filesystemobject/textstream.htm
お礼
ありがとうございます。 >単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね? なんとなくあっています。が、このへんはまだ未定なのでどのようにでもできると思うのですが、「テキストの数値の取得はどうやるのかな?」というところで悩んでおりました。 >テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば~(略) そのような方法があったのですね。一行ずつ判定していく方法は使えるかもです!しかも取り込みの際にチェックするのは2度手間がなくて良いですね。 先が見えてきました!URLを見て勉強させていただきます!
お礼
ありがとうございます。非常に参考になります。 コードをいただきましたが、調べながら解析しています。 いろいろな方法があるので勉強になりますね。