アプリ版:「スタンプのみでお礼する」機能のリリースについて

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に読み込まなくても数値を検索する方法があればそちらの方法もお願いします)。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/17 22:48

どういう構成、設計にしようとしているのかがさっぱり分からないのですが。


単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね?? 全然違うものを想定されているのでしょうか。
テキストボックスにまとめて取り込んで、改行マークを目印にしたりで、分割して配列に取り込んでなどの方法を考えたりもしましたが、もっと単純に分かりやすく、操作しやすい設計が幾らでも思いつくのですが。

とりあえずその想定に近いものを考えるなら、テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば、一行ずつの判定もしやすいですから、あとは条件別に仕分けるとかそんなイメージになりましたが。取り込んだあと検索するのではなく、取り込みの際にチェックするという方法。
http://www.officetanaka.net/excel/vba/filesystem …
    • good
    • 0
この回答へのお礼

ありがとうございます。

>単純に考えれば、コンボボックスに「通勤時間A」「通勤時間B」...が選択できるようになっていて、コンボボックスで選んだ値によってリストボックスでrootの数字が出るとかそんな感じになるんじゃないんですかね?

なんとなくあっています。が、このへんはまだ未定なのでどのようにでもできると思うのですが、「テキストの数値の取得はどうやるのかな?」というところで悩んでおりました。

>テキストファイルからの読み込みはTextStreamオブジェクトのreadlineメゾットを使って行うようにすれば~(略)

そのような方法があったのですね。一行ずつ判定していく方法は使えるかもです!しかも取り込みの際にチェックするのは2度手間がなくて良いですね。
先が見えてきました!URLを見て勉強させていただきます!

お礼日時:2006/12/15 04:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!