1.セルに文字列がはいっています。「ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。」といった文字列です。
2.この文字列の最初に「は」がでてきたら行頭と「は」の一つ前に括弧をつけたいです
3.上の例では「ABCDEFG」はHIJKLMN・・・・といった文字列に変換したいです。
4.上はあくまで例で、行頭と一番最初にでてきた「は」の前に括弧をつけたいのです。
これを行うにはどのような関数もしくはVBAで実現すればよいでしょうか?
A1セルに文字列があるとすればこういう関数でどうでしょうか。
先頭の文字が「は」だった場合は回避しておきました。
=IF(ISERROR(FIND("は",RIGHT(A1,LEN(A1)-1))),A1,"「" & SUBSTITUTE(A1,"は","」は",1))
正規表現でのサンプルです。
「ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。」が入っているセルをアクティブにして、
Test()を実行してください。カッコが付加されます。
Option Explicit Sub Test() ActiveCell.Value = ReplaceText(ActiveCell.Value) End Sub Function ReplaceText(str) Dim str2 Dim oRe, oMatch, oMatches Set oRe = CreateObject("VBScript.RegExp") oRe.Pattern = "^(.+)(は.+なんだけど、今日は.+です。)" Set oMatches = oRe.Execute(str) If oMatches.Count = 0 Then Set oMatches = Nothing Set oRe = Nothing ReplaceText = str Exit Function End If Set oMatch = oMatches(0) str2 = "「" & oMatch.SubMatches(0) & "」" & oMatch.SubMatches(1) Set oMatch = Nothing Set oMatches = Nothing Set oRe = Nothing ReplaceText = str2 End Function
正規表現を使った関数で簡単にできます。
先ずは、次のマクロを標準モジュールにコピー&ペーストします。
Option Explicit Function RepReg(sSrc As String, sPtn As String, sRplStr As String) As String Dim regEx As Object Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = sPtn regEx.IgnoreCase = True 'regEx.Global = True '全体マッチで置き換えるときにTrueにする RepReg = regEx.Replace(sSrc, sRplStr) End Function
次にExcelのシート内で、次のような関数を入れます(セルA2)。
A | |
---|---|
1 | ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。 |
2 | =RepReg(A1,"^([^は]*)は","「$1」は") |
以前も正規表現について聞かれていたようですが、正規表現の便利なところは、簡単に置換えパターンを指定して、文を様々に置き換えられるところにあります。
例えば、句読点で前と後ろの文を入れ替えるには、次のようにします。
=RepReg(A1,"^([^、]*)、(.*)$","$2$1")
→ 今日はOPQRです。ABCDEFGはHIJKLMNなんだけど
他にも、応用が利きます。
=RepReg(A1,"^([^は]*)は(.*)なんだけど、今日は([A-Za-z]+)","【$1】は、$2です。でも明日は「$3」")
→ 【ABCDEFG】は、HIJKLMNです。でも明日は「OPQR」です。
A1 | B1 | C1 | D1 | E1 | F1 |
---|---|---|---|---|---|
ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。 | =SEARCH("は",A1) | =LEFT(A1,B1-1) | 「 | 」 | =CONCATENATE(D1,C1,E1) |
A1 | B1 | C1 | D1 | E1 | F1 |
---|---|---|---|---|---|
ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。 | 8 | ABCDEFG | 「 | 」 | 「ABCDEFG」 |
この表記でどうでしょうか?
コメント(0件)