- 締切済み
複数の括弧を中の値も含めて一括で削除する式、マクロ
エクセルA列60000行の値で(*),「*」,[*],{*},<*> ,【*】,『*』,〔*〕,<<*>>の複数の括弧を中の値も含めて一括で削除する式、マクロを教えてください
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- SI299792
- ベストアンサー率47% (774/1618)
私の所では、上手くいっています。念のため上げておきます。 https://drive.google.com/file/d/1w3R76_IcMxX9-lrxTjKyRadWE3sFV6aQ/view?usp=sharing 変換できなかったテキストそのものを上げて下さい。 そうしなければ原因は解りません。
- SI299792
- ベストアンサー率47% (774/1618)
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 上手くいかない例(文字列)を上げていただけますか。
- imogasi
- ベストアンサー率27% (4737/17069)
回答ではないのですが、下記を質問に書いてないのは、質問表現として不十分でしょう。 ーー 色々な括弧について、ネストしたような使い方(出現の仕方)は、元データで、なされていないのでしょうね。 ーー 既回答で挙げておられる例も、そういう例ですが、それで十分ですか?。 ーー 本当は色んな場合でも、要求を満たすプロググラム(その基礎にある アルゴリズム)が組めればよいのですが、小生には、難しい。 正規表現を使ってもむつかしそう。 括弧の、開始ー閉じの照合性などは、チェック不要らしい、原データなのですか?。 なんか、回答者は、回答の実行だけやって、正否を言っているだけのようで、仕組みを理解して、修正する力はないらしく、こういう質問のことを考える以前のレベルではないか。自分で間違い箇所を見つける力はないの。 ーー 上記の仮定がOKなら、単純にInstr関数をいじくりまわしてできるように思うが。 ーー さらには、この質問サイトであっても、数学のカテゴリに質問して、良いアルゴリズムを勉強したらと思う。安易に考え過ぎと思う。
- HohoPapa
- ベストアンサー率65% (455/693)
>マクロが作動しません 動作確認してポストしています。 どのように動作しませんでしょうか?
- SI299792
- ベストアンサー率47% (774/1618)
グーグルスプレッドシートには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/
補足
}と(括弧内の値)が残ります
- HohoPapa
- ベストアンサー率65% (455/693)
後記のコードはいかがでしょうか。 なお、添付画像の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
補足
マクロが作動しません
- msMike
- ベストアンサー率20% (364/1804)
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"(*)",""),"「*」",""),"[*]",""),"{*}",""),"<*>",""),"【*】",""),"『*』",""),"〔*〕",""),"<>","")
補足
何も消えません 括弧も括弧の中身も消えません
補足
テキストが悪いのか(括弧内の値)だけが残ります 他は削除できたのでありがとうございました