[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『括弧は残して、文字だけを一括して消す』(れいわ20)
こんなことができますか。
Excelのあるセルに10文字から50文字程度の文があるとします。
その文の途中にランダムに( )のような括弧の部分があるとして
この括弧の部分の括弧は残して、文字だけを一括して消すことを
マクロ又は関数を使ってできますか。お教え下さいませんか、お伺いします。
なお、括弧内の文字数も10文字以内の文字数になります。括弧の中が
空欄のところはありません。件数が1500件ほどです。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
AAAA(BBB)CCC とあった場合、 AAAA()BBB となればいいのだろうか?
(ねむねむ) 2019/05/14(火) 09:23
すまない。 AAAA()CCC だった。 (ねむねむ) 2019/05/14(火) 09:23
「(あいう)」を「あいう」にしたいということですよね。
括弧以外を残すのではなく、"("と")"を、""に置換したらどうでしょうか?
別案で、文字数を数えて、2文字目〜全体の文字数-2文字目までを取り出すとかでもいけそうにおもいます。
-追記分---- ねむねむさんの指摘のように、括弧の外側に文字があるなら別案のほうは、ちょっとまずいですね。
(もこな2) 2019/05/14(火) 09:28
Dim c As Range, i As Long, j As Long If TypeName(Selection) <> "Range" Then Exit Sub For Each c In Selection For i = 1 To Len(c.Value) comm = comm & Mid(c.Value, i, 1) If Mid(c.Value, i, 1) = "(" Then For j = i To Len(c.Value) If Mid(c.Value, j + 1, 1) = ")" Then Exit For i = i + 1 Next j End If Next i c.Value = comm Next c End Sub (mm) 2019/05/14(火) 09:45
Dim c As Range, i As Long, j As Long, comm As String If TypeName(Selection) <> "Range" Then Exit Sub For Each c In Selection comm = "" For i = 1 To Len(c.Value) comm = comm & Mid(c.Value, i, 1) If Mid(c.Value, i, 1) = "(" Then For j = i To Len(c.Value) If Mid(c.Value, j + 1, 1) = ")" Then Exit For i = i + 1 Next j End If Next i c.Value = comm Next c End Sub (mm) 2019/05/14(火) 09:47
abc(www)ddd のように括弧が一か所のみなら
Sub mySingleReplace() Selection.Replace "(*)", "()", 2 End Sub
abc(www)ddd(xxx)aaa のように単数・複数存在する場合
Sub MultipleReplace() Dim r As Range With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\(.*?\)" For Each r In Selection r.Value = .Replace(r.Value, "()") Next End With End Sub (seiya) 2019/05/14(火) 09:57
>その文の途中にランダムに( )のような括弧の部分がある
と書いてありましたね。
とりあえず、A1セルに書いてある内容から、"("、")"を除いてB1(〜B3)セルへ出力する方法として
●数式案
B1セル =SUBSTITUTE(SUBSTITUTE(A1,"(",""),")","")
●マクロ案
Sub さんぷる() '▼Replace関数 Range("B2").Value = Replace(Replace(Range("A1").Value, "(", ""), ")", "")
'▼Replaceメソッド With Range("B3") .Value = Range("A1").Value .Replace What:="(", Replacement:="", LookAt:=xlPart .Replace What:=")", Replacement:="", LookAt:=xlPart End With
End Sub
補足:Replaceメソッドの場合は、複数セルを同時に処理できます。
(もこな2) 2019/05/14(火) 10:03
>マクロ又は関数を使ってできますか
置換ではダメなんですか?
範囲を選択して Ctrl+H(置換)
検索する文字列:(*) 置換後の文字列:() 「すべて置換」をクリック
半角カッコなら半角にしてください。 「*」は必ず半角で
以上、参考まで
>"("、")"を除いて >(もこな2) 2019/05/14(火) 10:03 「括弧は残して」とはっきり書いてあるのに、なんでこんな脳内変換されるんですかね? 逆ギレお断り。 (笑) 2019/05/14(火) 10:13
>その文の途中にランダムに( )のような括弧の部分があるとして >この括弧の部分の括弧は残して、文字だけを一括して消すことを
削除ではなく、空白で埋めるなら
Sub MultipleReplace() Dim r As Range, i As Long, m As Object With CreateObject("VBScript.RegExp") .Global = True .Pattern = "\((.*?)\)" For Each r In Selection If .test(r.Value) Then For i = .Execute(r.Value).Count - 1 To 0 Step -1 Set m = .Execute(r.Value)(i) r.Value = Application.Replace(r.Value, m.firstindex + 1, _ m.Length, "(" & Space(Len(m.submatches(0))) & ")") Next End If Next End With End Sub (seiya) 2019/05/14(火) 10:16
ということなら、シンプルに
Selection.Replace "(*)", "()", xlPart
でいいかと。
Replaceメソッドは複数の置換にも対応してますので。
(hatena) 2019/05/14(火) 10:27
置換後の文字列:() 「すべて置換」をクリック (れいわ20) 2019/05/14(火) 12:24
逆ギレかどうかしらんけど、れいわ20さんに対してのお詫びだけ。
(もこな2) 2019/05/14(火) 13:57
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.