• 締切済み

複数の括弧を中の値も含めて一括で削除する式、マクロ

エクセルA列60000行の値で(*),「*」,[*],{*},<*> ,【*】,『*』,〔*〕,<<*>>の複数の括弧を中の値も含めて一括で削除する式、マクロを教えてください

みんなの回答

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.7

私の所では、上手くいっています。念のため上げておきます。 https://drive.google.com/file/d/1w3R76_IcMxX9-lrxTjKyRadWE3sFV6aQ/view?usp=sharing 変換できなかったテキストそのものを上げて下さい。 そうしなければ原因は解りません。

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.6

HohoPapaさんのデータで検証した結果、 B1: =RegexReplace(A1,"\([^\)]+\)|「[^」]+」|\[[^\]]+\]|\{[^\}]+\}|<[^>]+>+|【[^】]+】|『[^』]+』|〔[^〕]+〕","") でないといけないことが解りました。 この数式では上手くいっています(但し、入れ子の問題は残ります) aa(*111)bb[*222]CC → aabbCC (abcd)ef(ghijk)lmn(sss)opar → eflmnopar aa(*111)『123』b[*222]cc → aabcc (abcd)ef(ghijk)lm『n【sss】o』pqr → eflmpqr a b c(d e(f) g h(i j)k l) m n → a b c g hk l) m n あいう【えお『かきく】け』こ → あいうけ』こ <abcd>ef<<ghijk>>lmn<<sss>>opar → eflmnopar 上手くいかない例(文字列)を上げていただけますか。

nakanakaokwave
質問者

補足

テキストが悪いのか(括弧内の値)だけが残ります 他は削除できたのでありがとうございました

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

回答ではないのですが、下記を質問に書いてないのは、質問表現として不十分でしょう。 ーー 色々な括弧について、ネストしたような使い方(出現の仕方)は、元データで、なされていないのでしょうね。 ーー 既回答で挙げておられる例も、そういう例ですが、それで十分ですか?。 ーー 本当は色んな場合でも、要求を満たすプロググラム(その基礎にある アルゴリズム)が組めればよいのですが、小生には、難しい。 正規表現を使ってもむつかしそう。 括弧の、開始ー閉じの照合性などは、チェック不要らしい、原データなのですか?。 なんか、回答者は、回答の実行だけやって、正否を言っているだけのようで、仕組みを理解して、修正する力はないらしく、こういう質問のことを考える以前のレベルではないか。自分で間違い箇所を見つける力はないの。 ーー 上記の仮定がOKなら、単純にInstr関数をいじくりまわしてできるように思うが。 ーー さらには、この質問サイトであっても、数学のカテゴリに質問して、良いアルゴリズムを勉強したらと思う。安易に考え過ぎと思う。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

>マクロが作動しません 動作確認してポストしています。 どのように動作しませんでしょうか?

  • SI299792
  • ベストアンサー率47% (774/1618)
回答No.3

グーグルスプレッドシートにはRegexReplaceという便利な関数があります。 Excel に移植しました。 A1から始まっているとします。 B1: =RegexReplace(A1,"\(.*\)|「.*」|\[.*\]|\{.*\}|<.*> |【.*】|『.*』|〔.*〕|<<.*>>","") 下へオートフィル。 \ はコピペすれば、半角¥になります。そのままで構いません。 このユーザー定義関数を標準モジュールに入れて下さい。 Option Explicit ' Function RegexReplace _   (Expression As String, Pattern As String, Change As String) As String   Dim RegExp As Object '   Set RegExp = CreateObject("VBScript.RegExp")   RegExp.Pattern = Pattern   RegExp.Global = True   RegexReplace = RegExp.Replace(Expression, Change) End Function あまり解りやすい説明ではありませんが、使い方です。 https://tanuhack.com/regexp/

nakanakaokwave
質問者

補足

}と(括弧内の値)が残ります

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

後記のコードはいかがでしょうか。 なお、添付画像の5,6行目のような入れ子には耐えられません。 Sub sample()  Const Coli = 1 '入力列番号  Const Colo = 2 '出力列番号  Const Rowb = 1 'データ開始行  Dim Rowcnt As Long  Rowcnt = Rowb    With ThisWorkbook.Sheets(1)   Do    If .Cells(Rowcnt, 1).Value = "" Then Exit Do    .Cells(Rowcnt, Colo).Value = DelKakkoN(.Cells(Rowcnt, Coli).Value)    Rowcnt = Rowcnt + 1   Loop  End With End Sub Function DelKakkoN(ParaText As String) As String  Dim wkText As String  wkText = ParaText  wkText = DelKakko(wkText, "(", ")")  wkText = DelKakko(wkText, "「", "」")  wkText = DelKakko(wkText, "[", "]")  wkText = DelKakko(wkText, "{", "}")  wkText = DelKakko(wkText, "【", "】")  wkText = DelKakko(wkText, "『", "』")  wkText = DelKakko(wkText, "〔", "〕")  DelKakkoN = DelKakko(wkText, "<<", ">>") End Function Function DelKakko(ParaTrxt As String, s As String, e As String) As String  Dim SCol As Long  Dim ECol As Long  Dim tgText As String  Dim wkText As String    tgText = ParaTrxt    Do   SCol = InStr(tgText, s)   ECol = InStr(tgText, e)   If SCol = 0 Then Exit Do      wkText = ""     If SCol < ECol Then    If SCol > 1 Then     wkText = wkText & Left(tgText, SCol - 1)    End If    If ECol <> Len(tgText) Then     wkText = wkText & Right(tgText, Len(tgText) - ECol - (Len(e) - 1))    End If   End If   tgText = wkText  Loop    DelKakko = tgText   End Function

nakanakaokwave
質問者

補足

マクロが作動しません

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.1

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"(*)",""),"「*」",""),"[*]",""),"{*}",""),"<*>",""),"【*】",""),"『*』",""),"〔*〕",""),"<>","")

nakanakaokwave
質問者

補足

何も消えません 括弧も括弧の中身も消えません

関連するQ&A