Excelで以下のことを行いたいです。


1.セルに文字列がはいっています。「ABCDEFGはHIJKLMNなんだけど、今日はOPQRです。」といった文字列です。

2.この文字列の最初に「は」がでてきたら行頭と「は」の一つ前に括弧をつけたいです
3.上の例では「ABCDEFG」はHIJKLMN・・・・といった文字列に変換したいです。
4.上はあくまで例で、行頭と一番最初にでてきた「は」の前に括弧をつけたいのです。

これを行うにはどのような関数もしくはVBAで実現すればよいでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/08/12 18:45:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント23pt

A1セルに文字列があるとすればこういう関数でどうでしょうか。

先頭の文字が「は」だった場合は回避しておきました。

=IF(ISERROR(FIND("は",RIGHT(A1,LEN(A1)-1))),A1,"「" & SUBSTITUTE(A1,"は","」は",1))
id:HALSPECIAL No.2

回答回数407ベストアンサー獲得回数86

ポイント23pt

正規表現でのサンプルです。


「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


参考:SubMatches コレクション

id:airplant No.3

回答回数220ベストアンサー獲得回数49

ポイント22pt

正規表現を使った関数で簡単にできます。


先ずは、次のマクロを標準モジュールにコピー&ペーストします。

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」です。

id:sk_kls No.4

回答回数26ベストアンサー獲得回数1

ポイント22pt

コード

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」

この表記でどうでしょうか?

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません