ある文字列を検索するボタンのつくりかた

このQ&Aのポイント
  • テキストファイルの内容を表示するボタンを作成しました。特定の文字列のみを抜き出す方法を教えてください。
  • 初心者でも簡単に実装できる方法を教えてください。
  • テキストボックスに表示するテキストファイルから特定の文字列を抜き出す方法を教えてください。
回答を見る
  • ベストアンサー

ある文字列を検索するボタンのつくりかた

あるテキストファイル(*.txt)の内容をテキストボックスに表示するボタンを作りました。さらに、このテキストファイルの内容の中から、決まった文字列のみを表示できるようにしたい(例.abcdefgと書かれたテキストに対してbcdのみ抜き出す)のですが、どうすれば良いのでしょうか。初心者なので、簡単にできる方法があれば教えてください。 <現在のコード> Dim myFile As String Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist '既存ファイルのみ読み込み CommonDialog1.ShowOpen If CommonDialog1.FileName = "" Then Exit Sub myFile = CommonDialog1.FileName FileRead Form1.Caption = "Form1 " & myFile End Sub Private Sub Form_Load() Form1.Height = 3510 End Sub Private Sub FileRead() Dim buf As String On Error GoTo ErrTrap1 Open myFile For Input As #1 RichTextBox1.Text = "" While Not EOF(1) Line Input #1, buf RichTextBox1.Text = RichTextBox1.Text & buf & Chr(13) & Chr(10) Wend Close #1 Exit Sub ErrTrap1: MsgBox Err.Description Err.Clear End Sub

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

  • ベストアンサー
  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.2

補足の回答です。 pos = InStr(1,RichTextBox1.Text,"bcd") If pos > 0 Then  RichTextBox1.Text = Mid$(RichTextBox1.Text,pos,Len("bcd")) End If strTextに"bcd"のみ抜き出します。 ある意味、 pos = InStr(1,RichTextBox1.Text,"bcd") If pos > 0 Then  RichTextBox1.Text = "bcd" End If でも同じ結果が返ります。

ahoojpn
質問者

お礼

"bcd"のみ拾えるようになりました。ありがとうございます。

ahoojpn
質問者

補足

"bcd"のみ表示できるようになったのはいいのですが、"bcd"文字列が複数回 出ているテキストファイルも1回分しか表示できません(つまり"bcd"があるか ないかはわかるのですが、何回表示されているかがわからない)。下の例の ように出来ないものでしょうか。 例. a"bcd"efg "bcd"xyz "bcd" "bcd" と書かれたテキスト      これを"bcd"のみ表示できるように設定したボタンを押す           ↓   "bcd"とテキストボックスに表示される           ↓   本当は "bcd" "bcd" bcd" "bcd" と表示したい(上の例では"bcd"が   4回出ているため) また、"bcd"が一度も出てこないテキストに対しては、テキストボックスに 何も表示がでないようにした上に、「"bcd"が見つかりません」と書かれた メッセージボックスを表示したいのですが、現状では元の文がそのまま 表示されてしまいます。If式を使うか、 If pos > 0 Then  RichTextBox1.Text = "bcd" の後に、"Else"で処理すればよいかとは思うのですが、これもよくわから ないので、あわせて教えていただけないでしょうか。

その他の回答 (1)

  • sorarisp
  • ベストアンサー率58% (7/12)
回答No.1

単純に、文字列から特定の文字列を抜き出すと考えてよいのでしょうか? 上の例で言うと、"abcdefg" → "aefg" のようにする。 というこで説明しますと、 InStrを使った方法。 pos = 1 Do  pos = InStr(pos,RichTextBox1.Text,"bcd")  If pos > 0 Then ' 見つからなければ0を返します   If pos = 1 Then    RichTextBox1.Text = Mid$(RichTextBox1.Text,pos + Len("bcd"))   ElseIf pos > Len(RichTextBox1.Text) - Len("bcd") Then    RichTextBox1.Text = Left$(RichTextBox1.Text,pos - 1)   Else    RichTextBox1.Text = Left$(RichTextBox1.Text,pos - 1) & Mid$(RichTextBox1.Text,pos + Len("bcd"))   End If  End If Loop while pos > 0 And pos < Len(RichTextBox1.Text) 試していないのでなんともいえませんがこれで出来るはずです。 それともう一つ。 Replaceを使った方法。 RichTextBox1.Text = Replace(RichTextBox1.Text,"bcd","") これでも出来ると思います。

ahoojpn
質問者

お礼

質問の意味と答えが喰い違ってしまいましたが、「InStrを使った方法。」で "aefg"を抜き出すことが出来ました。ありがとうございます。度々申し訳ない のですが、回答に対する補足のやり方も教えていただけないでしょうか。

ahoojpn
質問者

補足

質問の仕方が悪かったようで、すいません。 例.abcdefgと書かれたテキストに対してbcdのみ抜き出す   "abcdefg" → "bcd" のようにする。 という意味です。

関連するQ&A

  • 実行時エラー '32755' [キャンセル] ボタンが選択されました。 について

    ファイルを保存する時、キャンセルをするとタイトルどおりのエラーメッセージが出ます。当方、初心者でデバッグの仕方がわからず困ってます。どなたか教えてください。 コードの一部 Dim myFile As String Private Sub Command2_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlOFNOverwritePrompt '上書き確認する CommonDialog1.ShowSave '!!!デバッグの際はこの行が反転表示されます!!! If CommonDialog1.FileName = "" Then Exit Sub myFile = CommonDialog1.FileName FileWrite Form1.Caption = "Form1" & myFile End Sub Private Sub FileWrite() Dim buf As String Open myFile For Output As #1 Print #1, RichTextBox1.Text; '最後の';'は余計な複改を入れないため Close #1 Exit Sub End Sub

  • ファイルを読み込んだらVBがフリーズする

    ↓のコードだと、ファイルを読み込んだ時点でVBがフリーズします(平気なファイルも一部ある)。原因と解決法を教えてください。 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub Private Sub FileRead(FL As String) Dim FileNo As Integer Dim strDAT As String Dim strELM As String Dim pot1 As Integer, pot2 As Integer Dim pDB1 As Integer, pDB2 As Integer FileNo = FreeFile() Open FL For Input As #FileNo While Not EOF(FileNo) Line Input #FileNo, strDAT strDAT = strDAT & ":" pot1 = InStr(strDAT, ":") While pot1 > 0 strELM = Left(strDAT, pot1) pot2 = InStr(strELM, "OPEN") While pot2 > 0 pDB1 = InStr(strELM, Chr(&H22)) If pDB1 > 0 Then '前の『"』の位置 pDB2 = InStr(pDB1 + 1, strELM, Chr(&H22)) If pDB2 > 0 Then RichTextBox1.Text = RichTextBox1.Text & _ Mid(strELM, pDB1 + 1, pDB2 - pDB1 - 1) & vbCrLf End If End If pot2 = InStr(pDB2 + 1, strELM, "OPEN") Wend strDAT = Mid(strDAT, pot1 + 1) pot1 = InStr(strDAT, ":") Wend Wend Close #FileNo End Sub

  • テキストボックスの中身をリセット(クリア)したい

    ファイル(*.txtのみ)を読み込んで、テキストボックスに中身を表示させておりますが、2回以上ファイルを読み込んだ時、テキストボックスに書かれた内容を消した上で、読み込んだファイルの中身を表示させるように変更できないでしょうか。また、テキストボックスに書かれた内容をクリアするボタンの作り方も知りたいです。 例、1.ABCと書かれたテキストの読み込み→ABC   とテキストボックスに表示される    2.XYZと書かれたテキストの読み込み→ABC XYZ とテキストボックスに表示される これを2.を読み込んだ時、ABCを表示せずにXYZと表示したい コードの一部 Private Sub Command1_Click() CommonDialog1.Filter = "テキスト(*.txt)|*.txt|すべて(*.*)|*.*" CommonDialog1.FilterIndex = 1 CommonDialog1.Flags = cdlONFileMustExist '既存ファイルのみ読み込み CommonDialog1.CancelError = True On Error Resume Next CommonDialog1.ShowOpen If (Err = 0) Then FileRead CommonDialog1.FileName End If On Error GoTo 0 End Sub

  • ボタンの検知

    すみません。初心者です。教えてください。 フォームにボタン1個、テキストボックス1個のプログラムです。 Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim chr As String Dim chr2 As String chr = "■" chr2 = Label1.Text Label1.Text = chr2 & chr End Sub このプログラムで ・ボタンを「押すたび」に"■"→"■■"→"■■■"と増えていきます。 これを ・ボタンを「押しままにすると」"■"→"■■"→"■■■"と増えていくようにするにはどうしたらよいでしょうか? 例えばタイマー使って100ms毎とかで"■"の数を増やしたいと思っていますが、「ボタンを押している」ということをどのように拾ったらいいか考えてもわかりません。 どなたかすみませんが教えてください。

  • VB6 名前を指定して保存する際に・・・

    こんにちわ。 ファイルを保存する際のコードを考えて作ったのですが、少し困ったので教えてください。 コードは・・・ With CommonDialog1 .CancelError = True .DialogTitle = "保存ファイル名指定" .DefaultExt = ".txt" .Filter = "テキストファイル(*.txt)|*.txt" .FilterIndex = 1 .ShowSave End With On Error GoTo aaa CommonDialog1.ShowSave Open CommonDialog1.FileName For Binary As #1 Put #1, , Text2.Text Close #1 Text2.Text = "" Exit Sub aaa: If Err.Number = 32755 Then MsgBox "キャンセル" End If これなんですが、text2の内容を保存する際に保存名を入れますが、一度保存OKを押すと「ファイル名.txt」となるのはいいんですが本当は1回OKを押した時点でtxtファイルとして保存できるようにしたいので、どなたか分かる方アドバイスお願いします。

  • VBでファイル読み込み

    VBであるところにあるCSVファイルのデータを読み込みエクセルへ変換出力したいのですが教えてください。コモンダイアログボックス(?)と言うものを使って作成したいのです。よろしくお願いします。 がんばってやってみたのですがわかりません。教えてください。 Private Sub Command1_Click() Dim gnum(25), tensuu(32, 99) Dim sougouten(99), heikin(99), gouhi$(99) 'ファイルを開く On Error GoTo ErrHandler 'コモンダイアログボックス CommonDialog1.CancelError = True CommonDialog1.Filter = "すべてのファイル (*.*)|*.*|" _ & "テキスト ファイル (*.txt)|*.txt|バッチ ファイル (*.bat)|*.bat" CommonDialog1.FilterIndex = 2 CommonDialog1.ShowOpen With CommonDialog1 .FileName = "" .ShowOpen End With Exit Sub ErrHandler: ' ユーザーが [キャンセル] ボタンをクリックしました。 End Sub

  • ファイル名がテキストボックスにうまく表示できない

    お世話になります。 filelistboxで選択したファイル名を選択した順に テキストボックスに表示させたいのですが、ファイル名の 後に改行コードを入れても改行して表示してくれません。 何が原因なんでしょうか?よろしく御教授願います。 例 aaa.txtを選択、テキストボックスに表示させ、 その後bbb.txtを選択するとテキストボックスの表示が ”aaa.txt‥bbb.txt”となる --------- aaa.txt(改行) bbb.txt --------- と表示したい。 (コード) Dim fname As String Private Sub File1_Click() fname = Dir1.Path & "\" & File1.FileName End Sub Private Sub Command3_Click() Call macappend End Sub Private Sub macappend() 'text1に選択マクロを追加    Dim macbuff1 As String    Dim macbuff2 As String    macbuff2 = Text1.Text    macbuff1 = fname + Chr(13) + Chr(11)    macbuff2 = macbuff2 + macbuff1    Text1.Text = macbuff2 End Sub

  • EXCELにテキストファイルを読込むマクロ作成

    EXCELにテキストファイルを「カンマ区切り」で読み込みしたいのですが、 下記マクロの内容ではカンマ区切りで正しくインポートされないのですが 作成方法ご伝授お願いいたします。 sub macro1()  dim myFile as string  myfile = application.getopenfilename(filefilter:="テキストファイル(*.txt),*.txt")  if myfile = "False" then exit sub  workbooks.opentext _   filename:=myfile, _   datatype:=xldelimited, _   textqualifier:=xltextqualifierdoublequote, _   tab:=true, _   comma:=true, _   space:=true ’予備  activeworkbook.worksheets(1).move before:=thisworkbook.worksheets(1) end sub

  • VBA 文字の置き換え

    下記のようなコードを実行すると置き換えはできるのですが もともとセルに入力されていた文字が消えてしまいます。 例 あいう完⇒えお完⇒かきく完 マクロ実行 かきく中 これを あいう完⇒えお完⇒かきく中 にしたいです。 よろしくお願いします。 これを Private Sub CommandButton4_Click() Dim txt As String Dim buf As String Dim buf2 As String txt = ActiveCell nStart = InStrRev(ActiveCell, "⇒") nLen = Len(ActiveCell.Text) - nStart buf = Replace(ActiveCell.Characters(Start:=nStart + 1, Length:=nLen).Text, "完", "中") ActiveCell = buf End Sub

  • VBでエディタ

    こんにちは。Kakugariです。  今、VBでエディタを作っていますがファイル操作でつまずいてしまいました。Commondialogからファイル名を取得して、そのファイルをMaintxtに表示するプログラムですがMaintxtに表示されるとき、Tabを使用してスペースを空けた部分が、無視されて文字が前に詰めて表示されます。それ以外は正常です。下にコードを載せましたので、お分かりになられる方は、間違いを指摘していただけたらありがたいです。ちなみにVB6です。Commondialogのプロパティは、デザイン時に設定されています。 Private Sub mnuOpen_Click()   On Error GoTo ErrCode   With CommonDialog1     .DialogTitle = "開く"     .ShowOpen   End With   Dim txt As String, Work As String   Open CommonDialog1.FileName For Input As #1   Do While Not EOF(1)     Input #1, Work     txt = txt & Work & vbCrLf   Loop   Close #1   Maintxt = txt   Exit Sub ErrCode:   Close #1   MsgBox "ファイルは開けませんでした。", vbCritical End Sub

専門家に質問してみよう