人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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


●質問者: akaired
●カテゴリ:コンピュータ
✍キーワード:Excel VBA セル 文字列 関数
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● SALINGER
●23ポイント

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

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

=IF(ISERROR(FIND("は",RIGHT(A1,LEN(A1)-1))),A1,"「" & SUBSTITUTE(A1,"は","」は",1))

2 ● HALSPECIAL
●23ポイント

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


「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 コレクション


3 ● airplant
●22ポイント

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


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

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


4 ● sk_kls
●22ポイント

コード

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ