• ベストアンサー

VBAでの文字列操作

VBAでsの文字列からtの文字列を削除したssの文字列を生成したいのですが どのようにすれば、いいのでしょうか? s = "AAABBBCCCDDDEEE" t = "BBCC" 'を取り除いて ss = "AAABCDDDEEE" としたいです。tは "AAA"だったり、"ABBB"だったりしても その文字を省いた文字列を生成したいです。 VBAの文字列処理でInStrは使われるのでしょうか?

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

こんにちは。 例えば、AAABBBCCCDDDEEE-BBCC なら最初の BBCC だけ取り除いて AAABCDDDEEE-BBCC となれば良いのですか? Replace 関数の名前付引数 count に 1 を指定すれば良いのでは?   Replace(expression, find, replace[, start[, count[, compare]]]) こんな感じ。 Dim s1 As String Dim s2 As String s1 = "AAABBBCCCDDDEEE-BBCC" s2 = "BBCC" MsgBox Replace(s1, s2, "", , 1)

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

Sub try() Dim RegExp As Object Dim s As String Dim t As String Dim ss As String Set RegExp = CreateObject("VBScript.RegExp") RegExp.Global = False s = "AAABBBCCCDDDEEE" t = "BBCC" 'を取り除いて RegExp.Pattern = t ss = RegExp.Replace(s, "") MsgBox ss Set RegExp = Nothing End Sub ご参考になれば幸いです。

hox123
質問者

お礼

この方法も、今後考えます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

失礼、No4の回答に誤りがありました。 定義もしていない変数をつかっていました。 修正です。 Sub test02() s = "AAABBBCCCDDDEEE" t = "BBCC" For i = 1 To Len(s) If i < InStr(s, t) Or i > (InStr(s, t) - 1 + Len(t)) Then ns = ns & Mid(s, i, 1) End If Next MsgBox ns End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

> 最初の1か所もしくはすべての中の1回だけが条件です。 merlionXXです。 そういう条件の後出しはマナー違反でしょう。 回答者に無駄な労力を使わせます。 で、もっとスマートなやりかたもあるとは思いますが質問文のInStrを使いました。 Sub test02() s = "AAABBBCCCDDDEEE" t = "BBCC" For i = 1 To Len(s) If i < InStr(s, t) Or i > (f - 1 + Len(t)) Then ns = ns & Mid(s, i, 1) End If Next MsgBox ns End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

No.1です。 > 同じ文字列が1つ以上あった場合、すべて置換されてしまうので、 > 最初の1か所もしくはすべての中の1回だけが条件です。 それでInStrが云々と言う話なのですね。納得。 それじゃ、こんな感じで Sub Sample()  s = "AAABBBCCCDDDEEE"  t = "BBCC" 'を取り除いて  n = InStr(s, t)  ss = s  If n > 0 Then   ss = Right(s, n - 1) & Left(s, Len(s) - n - Len(t))  End If  MsgBox (ss) End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Sub test01() s = "AAABBBCCCDDDEEE" t = "BBCC" MsgBox Replace(s, t, "") End Sub では?

hox123
質問者

補足

言葉足らずでした。 同じ文字列が1つ以上あった場合、すべて置換されてしまうので、 最初の1か所もしくはすべての中の1回だけが条件です。

全文を見る
すると、全ての回答が全文表示されます。
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

Replace関数をHELPで調べましょう Sub Sample()  s = "AAABBBCCCDDDEEE"  t = "BBCC" 'を取り除いて  ss = Replace(s, t, "")  MsgBox (ss) End Sub

hox123
質問者

補足

すみません、言い忘れていました。 replaceを使うと1回だけでなく、sに同じ文字列があった場合すべて削除されます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA文字列の抜き出し方

    こんにちは。Excel VBAで文字列を抜き出したいと思っています。 変数には下記のようなデータがはいっています。 hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz" コード2:から始まって/の手前までのデータ、つまりyyyyのみを抜き出したいと思っていますが、どのように抜き出すことができるでしょうか? instrでコード2を検索しても、どのように「/」を検索すればいいのかわかりません。 このあと、ループを使ってyyyyを連続的に抜き出していきたいと思っています。各文字列の文字数は不定です。 宜しくお願い致します!

  • 【VBA】 文字列の中から指定の文字列を取り出す

    VBAで文字列から指定の文字のn番目からn+1番目までの文字列を取り出すことは可能でしょうか? A1セルに下記の文字列があった場合、「1番目の半角スペースから2番目の半角スペースまでの文字列」を取り出したいのです。 5 53 00 8R この場合、53を取り出したいというわけです。 また、可能でしたら「最後の半角スペースから文字列の最後まで」を取り出す方法も教えていただけるとありがたいです。 この場合は8Rとなります。 InStr関数を使えばできるかもと思ったのですが、できそうなものが思い浮かびません。 どなたか教えていただけませんでしょうか。 よろしくお願いいたしますm(_ _)m

  • セル内の文字列操作について

    Excelでセル内の文字列を操作したいのですが、Excelの標準の関数では出来そうにないので、どなたかお力をお貸しください。 1つのセル内に、文字列や数値が複数入っています。 (例) Excel 12 りんご Word 11 このセルを調べて、数値のデータが複数入っている場合、最大値のみを表示させ、残りの数値データは削除したいのです。 (結果) Excel 12 りんご Word この処理の対象はセル内の数値データであって文字列には作用させず、結果的には文字列はそのまま表示させたいのです。 Excelの文字列に関する関数を調べてみたのですが、該当するものがなく、VBAを使用しなくてはならないのかもしれません。処理するデータが大量なため、VBAマクロなどで処理できれば大変ありがたいのですが、どなたかご存知の方がいらっしゃいましたら、ご教授くださいませ。どうぞよろしくお願いいたします。

  • outlook vba 文中の文字列取得

    outlook vba 文中の文字列取得 本文中に、 日付:9/10 名前:田中 住所:東京 とあるとき、田中 を取得したいのですが、 名前: から改行までの文字列について、 Mid(objItem.Body, InStr(objItem.Body, "名前:") + 4, (InStr(InStr(objItem.Body, "名前:"), objItem.Body, vbCrLf))) で取得しようとしましたがうまくいきません。 田中からあとすべてが取得されてしまいます。 何か間違っていますでしょうか?

  • excelのVBAで文字列の結合はどうすればいいのでしょう。 

    EXCELのVBAで文字列の結合は aaa="こん" bbb=aaa & "にちわ" とすればbbbに「こんにちわ」が入りますが、 この例の「にちわ」 にあたる部分に ”(ダブルコーテーション)があるときは どうすればいいのでしょうか? たとえば  Worksheets("sheet1  と  ") を結合する場合です。 いかがでしょうか?

  • @がすでに含まれちゃってる文字列の操作

    perlで文字列中に@を使いたいときは ¥などでエスケープすればよいと思いますが、 (パラメタで受け取った)すでに@が入っている文字列の @までの文字列を切り取るにはどうすればよいでしょう。 どうぞ教えてください。よろしくお願いいたします。 たとえば、 $str1="aaa@bbb"; $str2=substr($str1,0,3); とやってもエラーになってしまいます。

    • ベストアンサー
    • Perl
  • ある条件の文字列検索とコピー(VBA)

    初心者なのでカテゴリ違いならすみません。 下記の処理をエクセルVBAで考えています。いろいろ調べて みたのですが、やり方教えてください。VBA初挑戦にしては 難易度が高いかもしれないです。 ・処理  下記のような条件で文字列を検索して、コピーして別ファイルに 編集して書き出す処理をする ・検索条件 「?」で始まり、「=」で終わる文字列     もしくは 「&」で始まり、「=」で終わる文字列 これを検索してコピーする 例えば、「?SAZANN=123456」という文字列を検索 して「SAZANN」という文字列だけコピーして他の ファイルに文字列を書き出したいんです。 自分のイメージでは、「?SAZANN=」だけ一旦コピー して他のファイルにそれを書き出して、編集段階で 「?」「=」を一括置換で削除するイメージでいます。 ご指導宜しくお願い致します。

  • cshの文字列操作(0埋め)

    ヤマトです。 cshの文字列操作について質問します。 環境はRed Had Linux7.2です。 数値を文字列に変換し、更に0埋めするのはどのようにしたら良いのでしょうか? 以下に例を書きます。 ====SAMPLE.sh(一部抜粋)==== @ NUM_AAA = 1 ECHO NUM_AAA set CHR_AAA = ××××× ECHO CHR_AAA ====SAMPLE.sh(実行結果)==== 1 01 以上の ××××× に当てはまる処理が分かりません。 C言語とかで言うなら、sprintf のような処理をしたいのですが。 どのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • VBAの文字列操作教えて

    EXCELのVBAを使って、あるセルの8桁の文字列の先頭2桁を取り出したいのですが、どのような命令を使えばいいのですか?例えば、「ABCDEFGH」の「AB」を取り出してその「AB」を違うセルに入れたいのです。教えてください。

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

このQ&Aのポイント
  • パソコンとプリンターを接続しようとした際にエラー表示が出て印刷ができない問題が発生しています。Windows11を使用しており、接続はBluetoothで行っています。
  • 現在、パソコンとプリンターを接続しようとしていますが、エラー表示が出て印刷ができません。使用しているOSはWindows11で、接続はBluetoothを使用しています。
  • プリンターをパソコンに接続しようとしても、パソコンの画面にエラーが表示されて印刷ができません。接続にはBluetoothを使用しており、OSはWindows11です。
回答を見る