VBAフォーム上のテキストボックス文章置換

このQ&Aのポイント
  • VBAを使用して、フォーム上のテキストボックスの文章を置換する方法について教えてください。
  • Wordで行っていた文章の置換をExcelで行いたいです。特にワイルドカードの使い方が分からないので、その方法も教えてほしいです。
  • テキストボックスの文章を置換するために、VBAでワイルドカードを使用する方法やセル参照を使った方法を教えてください。
回答を見る
  • ベストアンサー

VBA フォーム上のテキストボックス文章 置換

いつもお世話になっております。 前回も同じような質問をさせて頂きましたが、 自分でも説明下手だと思ったため 的を絞り、もう一度質問させて頂きました。 今回やりたいことは、フォーム上のテキストボックスを置換したいのです。 ワイルドカードを使って置換したいと思っています。 例) 転送者AAAAAAAAAAAAAAAAAAAAA 件名 ああああああああああ 本文 ああああああああああ     ああああああああああ     ああああああああああ 本文おわり いいいいいいいいいいいいい内容 うううううううううううううううううううう ううううううううううううううううう対策えええええ えええええええええええええええ えええええ添付おおおおおおおおおおお おおおおおおおおお転送者AAAAAA AAAAAAAAAAAAAAAAAAAAA 件名 ああああああああああ 本文 ああああああああああ     ああああああああああ     ああああああああああ 本文おわり いいいいいいいいいいいいい内容 うううううううううううううううううううう ううううううううううううううううう対策えええええ えええええええええええええええ えええええ添付おおおおおおおおおおお おおおおおおおお ↓ <件名> ああああああああああ <本文> ああああああああああ ああああああああああ ああああああああああ <内容> うううううううううううううううううううう ううううううううううううううううう <対策> ええええええええええ えええええええええええええええ <添付> おおおおおおおおおおお おおおおおおおおお <件名> ああああああああああ <本文> ああああああああああ ああああああああああ ああああああああああ <内容> うううううううううううううううううううう ううううううううううううううううう <対策> ええええええええええ えええええええええええええええ <添付> おおおおおおおおおおお おおおおおおおおお 上記のように置換使用と思っています。 もともとWordで行っていたのですが、 できれば、<内容>と<対策>の順番を変えたいと思い Excelにすることにしました。 件枠ワードが行をまたぐことが多いため、 フォーム上にテキストボックスを設置し、 データを貼り付け(例題みたいなもの) そして、置換して上記のような形にしたいと思っています。 (セルだと上手くできませんでした) 置換方法は、Wordと同じようにすれば良いかと思ったのですが、 VBAだとワイルドカードの使い方が良く分かりません。 VBAで、ワイルドカード置換する方法 または、セル参照で上手く置換できる方法など ありましたら、教えてください。よろしくお願い致します。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

VBAの置換(Replace)ではワイルドカードは使えません。 代わりに正規表現を使ってざっくりした(と、言うよりは「手抜き」な)サンプルを作ってみました。 Private Sub CommandButton1_Click()   '改行コードを「@」に置換(@を文章で使っている場合は、絶対使わない文字に代えて下さい)   TextBox1.Text = Replace(TextBox1.Text, vbCrLf, "@")   Call fReplace("転送者.+?件名", "@@<件名>@")   Call fReplace("^@@", "") '先頭の@@のみ削除   Call fReplace("本文 ", "<本文>@")   Call fReplace("本文おわり.+?内容", "<内容>")   Call fReplace("対策", "@<対策>@")   Call fReplace("添付", "@<添付>@")      TextBox1.Text = Replace(TextBox1.Text, "@", vbCrLf) '「@」を改行コードに戻す   TextBox1.Text = Replace(TextBox1.Text, " ", "") '全角スペースを削除    End Sub Function fReplace(sPat As String, sString As String) As String   Dim RE   Set RE = CreateObject("VBScript.RegExp")   With RE     .Pattern = sPat     .IgnoreCase = True     .Global = True   End With   TextBox1.Text = RE.Replace(TextBox1.Text, sString) End Function

satoron666
質問者

お礼

mt2008様、回答ありがとうございます! +?で、要らない部分も置換しているのでしょうか? プログラム、そして、 参考画像までありがとうございます!! 大変助かります。 プログラムの意味や、流れを確認したうえで 使用していきたいと思います! ありがとうございました!

関連するQ&A

  • VBAテクストボックス

    VBAでテキストボックスにセルから読み込んだデータを表示して 同一フォーム内にあるボタンで条件分岐するようなことは出来ますか。 一つの条件分岐が済んだらまた次のセルからデータを引っ張ってきてテキストボックスに表示させる ようなことを行いたいのですが。

  • VBAのテキストボックスについて

    VBAで作成したユーザーフォームのテキストボックスの中にhtmlのソースを貼り付けて、そのソースの中のtableタグ中から数値を取り出してそれぞれのセルに出力したいと考えていますが、そのようなことはできるのでしょうか。 自分である程度考えているのですが、なにぶん始めたばかりなのものですから、テキストボックス内の文字列をどう処理すればよいのかわかりません。 よろしければ教えてください。

  • VBAのテキストボックスの表示について

    エクセルでVBAを使っているのですが、作成したフォームのテキストボックスに、セルの[00]や[05]といった形式の値を入れようとすると、[0]や[5]と直されてしまいます。プロパティでうまく設定する方法はありますでしょうか? よろしくお願いいたします。

  • ACCESS97 VBA のテキストBOX

    VBAも初心者です。 ACCESSのフォームであるテキストBOXの内容を ボタンで同じ他のフォームのテキストBOX にデフォルト値としてSETするというような 処理をするというような場合どのような記述 をしたら良いでしょうか? ヒントでも良いのでお願いします。

  • エクセルVBAのユーザーフォーム上のテキストボックスについての質問です

    エクセルVBAのユーザーフォーム上のテキストボックスについての質問です。 Aのユーザーフォームの内容をBのユーザーフォームのテキストボックスへ引き継いで、Bのユーザーフォーム上で内容を編集するという仕組みにしたいのです。 Bのユーザーフォームは新規入力もかねたユーザーフォームなので、テキストボックスのイベントにAfterUpdateを使用して、テキストボックスの内容が書き換えられるとデータベースから検索して新規か既存か判断させています。 AのユーザーフォームからBのユーザーフォームのテキストボックスへ引継ぎさせるときにこのAfterUpdateを発生させたくないのですが、Application.EnableEvents=Falseなどを使ってもイベントが発生してしまいます。 また、イベントがどのタイミングで発生するかと、コードをステップで実行させると、このイベントは発生しません。そのために、いきづまってしまいました。 AのユーザーフォームからBに引き継ぐ処理  ユーザーフォームB.Load ---ユーザーフォームBのイニシャライズが実行される  ユーザーフォームB.テキストボックス = ユーザーフォームA.テキストボックス  ユーザーフォームB.Show ちょっと簡単に書きすぎですがこんな感じです。 コードをステップで実行するとユーザーフォームBのAfterUpdateは実行されません。(VBAエディタのバグ?) どなたか回答お願いします。

  • フォームのテキストボックスの内容

    こんばんは 顧客情報が入った名簿があり、ユーザーフォームを起動して入力・修正しています。チェックをすることで送付状を印刷するようにしてありますが、フォームの中に担当者が送付状に一言書き添えるためのテキストボックスを用意して送付状のセルに文章を入れようと思っています。ところが、テキストボックスでは改行して入力されている内容がセルにうまく表示できないのです。テキストボックスに表示されているとおりに印刷用シートに表示させるようなことは出来ないものでしょうか。よろしくお願いします。

  • フォームテキストボックスの表示設定

    Excelシートとユーザーフォームのテキストボックスを、 ConntrolSourceで連動させ表示させています。 この時、セルの表示は、時刻表示させ、時間単位の計算を行っていますが、フォームの表示が、時刻表とならず、0.5などと表示されてしまいます。フォームからの入力は、時刻入力してもセルへは、正常に時刻単位で入力できます。 フォームの、表示を時刻単位で表示するには、どうしたらよいのか、教えてください。VBA超初心者で、困り果てています。 よろしくお願いします。

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

    VBA初心者です。 エクセルVBAユーザーフォームのテキストボックスに入力した数字を通貨単位でセルに反映させるにはどうすれば良いのですか? Private Sub 一月OK_Click() Range("J10") = Me.一月売上 Range("J13") = Me.一月粗利 Unload Me End Sub 今はこんな感じです。 ここで月度の売上を入力してシート上で合計させたいのです。 よろしくお願いします。

  • 置換でヘッダ・フッタに設置したテキストボックスも対象にする方法

    wordの置換機能で特定のフォントを別の種類のフォントに変えようとしています. 本文の置換では,テキストボックスも含めて期待通りフォント種が置き換わるのですが, ヘッダ・フッタを表示させた状態で同じ操作をしても,ヘッダ・フッタに設置した テキストボックスは対象外のようでうまくいきません. ヘッダ・フッタに設置したテキストボックスを置換の対象にする方法をご教示ください.

  • excelでVBAでユーザーフォームのリストBOX

    下記VBAの作成の仕方を教えていただけないでしょうか。 やりたいこと (1)sheet2のA1セル~A5セルまでの間の間をユーザーフォームのリストボックスに登録する (2)sheet1のA1セルをクリックすると、ユーザーフォームが起動し、任意のリストをクリックすると、 その値がA1セルに格納され。ユーザーフォームが終了する。 ※コマンドボタンは使わずにお願いします。なおexcel2000です。

専門家に質問してみよう