• ベストアンサー

文字列操作

Visual Basic6.0 よろしくお願いします。 (1) a12bc34d56ef (2) a12bc3456 のような文字列から (1) 一番後ろの数字56 の前のa12bc34d (2) 一番後ろの数字3456 の前のa12bc を消して (1) 56ef (2) 3456 にしたい 場合はどうすれば良いでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。

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

  • ベストアンサー
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

正規表現です。 エラーチェックしてないので必ず数字列がある場合。 Sub sample() Dim str As String str = "a12bc34d56ef" 'str = "a12bc3456" With CreateObject("VBScript.RegExp") .Pattern = "\d+\D*$" '最後の1個以上の数字の繰り返しと0個以上の数字以外の繰り返し MsgBox .Execute(str)(0) End With End Sub ちゃんとプログラムする場合は[プロジェクト] メニューの [参照設定] で [Microsoft VBScript Regular Expressions 5.5] をチェックして、CreateObject("VBScript.RegExp")を使わないでプログラムする事をお勧めします。

Ksou
質問者

補足

どうもありがとうございます。 説明不足だったので、詳しく説明します。 すいません。 実は a12bc(2bc3456)b34cd のような文字列から特殊文字「()」の中で a12bc(3456)b34cd のように処理したいです。 例: Function sample(ByVal Text As String) As String Dim str As String Set str = CreateObject("VBScript.RegExp") str.Global = True str.Pattern = "\(\d\D*" '検索パターン sample = str.Replace(Text, "(") End Function しかし、a12bc(2bc)b34cdのように ()の中に数字が一箇所しかない場合は そのままa12bc(2bc)b34cdにしたいですが・・・ また解決できてない状況です。 ご指導宜しくお願いいたします。

その他の回答 (3)

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.4

正規表現は苦手なのですが、こんなのでは? Sub test() MsgBox sample("a12bc(2bc3456)b34cd a12bc(2bc34aa)b34cd") End Sub Function sample(ByVal str As String) As String Dim re As Object Set re = CreateObject("VBScript.RegExp") 'Dim re As New RegExp '[参照設定] で [Microsoft VBScript Regular Expressions 5.5]を使う場合は上2行がこの1行に re.Global = True re.Pattern = "(\()(.*?)(\d+\D*\))" sample = re.Replace(str, "$1$3") Set re = Nothing End Function

Ksou
質問者

お礼

ご指導ありがとうございました。 m(_ _)m

  • KG_
  • ベストアンサー率62% (34/54)
回答No.3

#1のものです。 やりたいことを誤解していたようです。 最後のに表示する数字以降にしたいということだったんですね^-^; 正規表現を使用するのであれば、こんなコードでも可能です。 簡素かどうかといえば簡素ではないですが、、、-_-; ----------------------------------------------- Dim reg As New RegExp Dim mc As MatchCollection Dim keyword As String Dim matchString As String Dim replaceString As String matchString = "" replaceString = "" keyword = "a12bc(2bc3456)b34cd" reg.Pattern = "\(.*\)" reg.Global = True Set mc = reg.Execute(keyword) If mc.Count > 0 Then matchString = mc.Item(0) reg.Pattern = "\d+" Set mc = reg.Execute(matchString) If mc.Count > 1 Then replaceString = "(" & Mid$(matchString, InStr(1, matchString, mc.Item(mc.Count - 1))) keyword = Replace$(keyword, matchString, replaceString) End If End If MsgBox keyword ------------------------------------------------------------- keywordにKsouさん指定の文字列をいれています。

Ksou
質問者

お礼

ご指導ありがとうございました。 m(_ _)m

  • KG_
  • ベストアンサー率62% (34/54)
回答No.1

Mid関数を使えば指定した位置から文字列を取得できます。 InStr関数を使えば指定した文字列がどこにあるか取得できます。 とりあえずTryしてみください :)

Ksou
質問者

お礼

アドバイス、 ありがとうございました。

関連するQ&A