[[20190514085946]] 『括弧は残して、文字だけを一括して消す』(れいわ20) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『括弧は残して、文字だけを一括して消す』(れいわ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


Sub main()
'対象セルを選択 (複数選択可)して実行
    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

Sub main()'修正あり
'対象セルを選択 (複数選択可)して実行
    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

AAAA(BBB)CCC → AAAA()CCC
aaa(bbb)ccc(ddd)eee → aaa()ccc()eee

ということなら、シンプルに

Selection.Replace "(*)", "()", xlPart

でいいかと。
Replaceメソッドは複数の置換にも対応してますので。

(hatena) 2019/05/14(火) 10:27


笑さん。できました。
思うような結果になりました。難しく考えすぎました。
置換を使えばできるのですね。*については知りませんでした。
その他のマクロや関数のことも参考にさせて下さい。
皆さん、ありがとうございました。
検索する文字列:(*)
 置換後の文字列:()
 
「すべて置換」をクリック
(れいわ20) 2019/05/14(火) 12:24

>「括弧は残して」とはっきり書いてあるのに、なんでこんな脳内変換されるんですかね?
> 逆ギレお断り。
あら、本当だ。逆に解釈してましたね。
れいわ20さん失礼しました。

逆ギレかどうかしらんけど、れいわ20さんに対してのお詫びだけ。

(もこな2) 2019/05/14(火) 13:57


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.