• ベストアンサー

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