• ベストアンサー

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

  • suffre
  • お礼率76% (2013/2633)

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

  • ベストアンサー
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

  • ExcelのVBAで行番号の数値を取得する方法

    ExcelのVBAで行番号の数値のみを取得する方法を教えて下さい。 (例) アクティブセルが「A55」の場合 ↓ 「55」という数字のみを変数に代入 よろしくお願いします。

  • テキストボックスに入力された値を取得する方法

    よろしくお願いします。 フォームにテキストボックスを配置し、ユーザーに文字を入力してもらいます。 OKボタンを押すと、その文字を取得できるようにしたいです。 VBだと・・・ Textbox1.value = a (aは変数) みたいな感じで変数に代入するだけでよかったと思うんですが・・・ どのように書いたら良いでしょうか?

    • ベストアンサー
    • Java
  • EXCEL VBAでクエリーを使用した抽出方法

    EXCEL VBAでクエリーを使用しデータを抽出する命令で困っています。 原始データ:CSVファイル (カンマ区切り) 項目の中に日付の入った項目があり指定した1日だけの抽出はうまくいきますが、 期間を指定(複数日)した場合にエラーとなってしまいます。 1日だけを指定した場合の命令(うまくいく) 日付という項目には数値タイプのデータが入っている hizukeという変数にテキストボックスの値を代入する hizuke = TEXTBOX日付1.Value SELECT * FROM ファイル名 WHERE 日付 LIKE '%" & hizuke1 & "%' " ※ ここでワイルドカード(%)を使わないとエラーとなってしまいますが・・・ 期間指定をした場合の命令(エラーとなる) 日付という項目には数値タイプのデータが入っている hizuke1という変数にテキストボックスの値を代入する hizuke2という変数にテキストボックスの値を代入する hizuke1 = TEXTBOX日付1.Value hizuke2 = TEXTBOX日付2.Value SELECT * FROM ファイル名 WHERE 日付 BETWEEN LIKE '%" & hizuke1 & "%' AND LIKE '%" & hizuke2 & "%' " この命令が正しいとは思いませんが、要はワイルドカードと演算子(BETWEEN)を併用したい訳です。 この考え方以外で期間指定のデータ抽出ができるのであればその方法を教えて下さい。 以上、よろしくお願いします。

  • エクセルVBA テキストボックスへのセットフォーカスについて

    エクセルVBAでユーザーフォーム内に配置されたテキストボックス への数値の入力時に、指定範囲内になければメッセージボックスで 規格外であることを警告し、その規格外が入力されたテキストボックス を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが どうすればよいのでしょうか? 自分で考えた構文です。 Private Sub TextBox1_AfterUpdate() Dim A As Single A = TextBox1.Text If A < 1.99 Or A > 3.00 Then MsgBox "規格外!!"     TextBox1.Text = "" TextBox1.SetFoucus End If Exit Sub End Sub これですと、次のテキストボックスにフォーカスが移動してしまいます。 次のテキストボックスにフォーカスを移動させずに、規格内の値が 入力されるまでフォーカスを移動させない方法を教えて下さい。 お願い致します。

  • テキストを点滅させたい

    現在、メインのASレイヤーに以下のAS2.0をいれています。 textbox_page.text = _global.text06; textbox_pageはダイナミックテキストです。 これに現在外部テキストから読み込ませた変数を代入してるのですが、 textbox_pageが含まれるグラフィックシンボルを点滅させたいと 思っています。 今のところ、 ・テキストボックスをタイムラインで点滅、メインASレイヤーで点滅の消えてるタイミングに再代入 ・テキストボックスにマスクレイヤーを追加してマスクの方を点滅(再代入なし) を試しましたが一旦ボックスが消えると消えたままになってしまいます。 他とのかねあいで静止テキストやフォント埋め込みが不可能な状況です。 アドバイスよろしくお願いします。 (MacX、Flash4.0/ver7/AS2)

    • ベストアンサー
    • Flash
  • EXCELのVBAについて

    エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

  • エクセルVBA、テイストボックス&ラベル

    いつもお世話になります。 エクセルのセルをcells(n,1)としてfor文を使うように、VBAのフォームのテイストボックスやラベル(10個ぐらい)に番号をつけてfor文を使いたいのですが、可能でしょうか? またfor文以外に順繰りに変数に代入できるでしょうか? 現状 a1=textbox1 ・・・ a10=textbox10と全部書かなければならないのを何とかしたいのです。 宜しくお願いします。

  • VBAのコンボボックスで選んだものによって、違う数字を代入させたい

    VBAのコンボボックスで選んだものによって、違う数字を代入させたい お知恵をお貸しください。 現在、EXCEL2007のVBAにて、ちょっとしたVBAを作成しています。 コンボボックスには14項目を設定しています。 そのコンボボックスで選んだものによって下のコードの@マーク部に違う数字を代入させたいのですが、どうしたらいいのでしょうか? (例) ----コンボボックス---- あ い う え お か き ・ ・ ・ コンボボックスは14項目あり、コンボボックス内の「う」を選ぶと、5が代入され下のコードの@部分に5が入ります こんな風にコンボボックス内の選ぶものによって違う数字が代入される。 Dim a As Date Dim b As Long a = TimeSerial(CInt(TextBox5.Text), CInt(TextBox6.Text), 0) - TimeSerial(CInt(TextBox3.Text), CInt(TextBox4.Text), 0) Label6.Caption = Hour(a) + Minute(a) / 60 Label7.Caption = (Hour(a) + Minute(a) / 60) * @

  • VBAである一定以上の数値を検索して、処理を行うようにしたいのですが…

    VBAである一定以上の数値を検索して、処理を行うようにしたいのですが… 初めまして。 業務で効率化を図るための簡易ソフトのようなものを作るため、VBAを勉強しています。 VBAである一定以上の数値をAシートのある範囲から検索して、ある一定以上の数値が1個以上であればテキストボックスにAシートのあるセルの言葉を表示させたいと考え、以下のようなものを作りましたが、「オブジェクト変数またはWithブロック変数が設定されていません」と出てしまいます。 どなたかご教授下さればとても助かります。 ちなみにExcel2007です。 Private Sub CommandButton1_Click() Dim Target1 As Variant Target1 = Worksheets("A").Range("D8:V8").Find(">=10") TextBox1.Text = "" Me.TextBox1.Font.Size = 14  If OptionButton1 = True Then If Target1 >= 1 Then Worksheets("A").Range("B33").Copy Me.TextBox1.Paste Application.CutCopyMode = False ElseIf Target1 = 0 Then Worksheets("A").Range("B34").Copy Me.TextBox1.Paste Application.CutCopyMode = False End If End If End Sub

  • テキストボックスの値を変数に代入したい。

    テキストボックスの値を変数に代入したいのですが、どういうコードを書けばいいですか? 例えばTextBox1の値を変数xに代入したいのですが。

専門家に質問してみよう