- ベストアンサー
Excelで一定条件の文字を()で挟む方法
Excelで、一定条件の文字を一括で()で挟みこむ置換え方法を教えてください。 一定条件は、例えばカタカナのみ()で挟むという指定です。 例 質問掲示板シツモンケイジバン 回答投稿カイトウトウコウ ↓ 質問掲示板(シツモンケイジバン) 回答投稿(カイトウトウコウ) 応用で、漢字のみ挟む方法と、数字のみ挟む方法も知りたいです。 よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
とりあえず、カタカナを()で挟むマクロを作ってみました。閉じ括弧は文字列の最後につけるようになっています。 Sub Main() Dim MyRange As Range Dim ChikanRange As Range Set ChikanRange = Application.InputBox(prompt:="セルを選択してください。", _ Type:=8) If ChikanRange Is Nothing Then Exit Sub For Each MyRange In ChikanRange Call KakkoHuka(MyRange) Next End Sub Sub KakkoHuka(MyRange As Range) '************************************************** ' 指定セルのカタカナを()で括る '************************************************** Dim MyLen As Integer Dim i As Integer Dim MyStr As String MyLen = Len(MyRange.Value) For i = 1 To MyLen MyStr = Mid(MyRange.Value, i, 1) If (MyStr >= "ア" And MyStr <= "ン") Or _ (MyStr >= "ア" And MyStr <= "ン") Then MyStr = Left(MyRange.Value, i - 1) & _ "(" & Right(MyRange.Value, MyLen - i + 1) & ")" MyRange.Value = MyStr Exit For End If Next End Sub
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
#5 の訂正です。 漢字の検索について 私の書いたものは、JIS漢字のフルサポートをしていません。 "[一-钁]+") JISの第二水準の途中までになっています。実務的には問題はないかもしれませんが、JIS文字の最後までに訂正します。 訂正後 "[一-龝]+") もし、Unicode 文字フルサポートするのでしたら、 "[\u4E00-\u9FA5\uF900-\uFA2D]+" このようになります。 なお、Excelのワークシート上では、標準では、Unicode文字は使いません。
お礼
ご回答ありがとうございました。 お礼が遅くなって申し訳ありません。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 #1 で書いた、Wen02 です。VBAはOKなんですか? 範囲を最初にマウスで選択しておいてから、マクロ「かっこを入れる」を実行してください。 このマクロは、カタカナ(全・半)、漢字、数字(全・半)、アルファベット(半)をカッコで括ることが出来ます。 上書き処理でよければ、 # '右隣に出力 # c.Offset(, 1).Value = rePickup(c, Ret) の部分を、 '右隣に出力 c.Value = rePickup(c, Ret) のように換えてください。 なお、単独の関数で用いるときは、一般の関数と同じで、 =repickup(A1) [デフォルトで、カタカナを括ります] とします。 '<標準モジュールを推奨,他モジュールでも可> '-------------------------------------------- Sub カッコ入れる() Dim Rng As Range, ans As Integer Dim c As Range, Ret As Variant Set Rng = Selection '範囲をマウスで選択 '範囲はよい? If Rng.Count = 1 Then ans = MsgBox("マウスで処理範囲を選択してください。" & Chr(13) _ & "現在のセルに処理を続行しますか?", vbYesNo) If ans = vbNo Then Exit Sub End If End If '対象は何? Ret = Application.InputBox("何を区分けしますか?" & Chr(13) & _ "カタカナ=0, 数字=1, Alphabet=2, 全角数字=3, 漢字=4", Type:=2) If VarType(Ret) = vbBoolean Or Ret = "" Then Exit Sub Else Ret = CInt(Ret) End If For Each c In Rng If VarType(c) = vbString Then '右隣に出力 c.Offset(, 1).Value = rePickup(c, Ret) End If Next End Sub Private Function rePickup(ByVal myStr As String, _ Optional myPat As Variant = 0) As String 'rePickup(文字, [スイッチ]=0:カタカナ, 数字:1,2:アルファベット,3:全角数字,4:漢字 Dim Re As Object, myArg As Variant, Matches As Object, Match As Object Dim Buf As String, Hankana As String Const LBr As String = "(" Const RBr As String = ")" 'Web上では半角カタカナが書けない Hankana = Chr(166) & "-" & Chr(223) Set Re = CreateObject("VBScript.RegExp") With Re '正規表現パターン myArg = Array("[ァ-ヶ" & Hankana & "]+", "[0-90-9]+", "[A-z]+", "[0-9]+", "[一-钁]+") .Pattern = "(" & myArg(myPat) & ")" .Global = True Set Matches = .Execute(myStr) If Matches.Count > 0 Then Buf = myStr Buf = .Replace(Buf, LBr & "$1" & RBr) End If rePickup = Buf End With Set Re = Nothing End Function '--------------------------------------------
- ta123
- ベストアンサー率51% (95/186)
それぞれのサブルーチンだけですが、以下に示します。 Main()の呼び出し先を書き換えてください。(もっとスマートなものに書き換えてください) 1)カタカナ:誤りがありました。[ヴ]や[ヲ](半角)などの判定が漏れていました。また、コーディング中の半角カナが全角に置き換えられていました。半角カナに書き換えてください。 2)漢字については一応コード表を見たのですが、カタカナと同じ間違いがあるかも知れません。 Sub KakkoHuka(MyRange As Range) '************************************************** ' 指定セルのカタカナを()で括る '************************************************** Dim MyLen As Integer Dim i As Integer Dim MyStr As String MyLen = Len(MyRange.Value) For i = 1 To MyLen MyStr = Mid(MyRange.Value, i, 1) If (MyStr >= "ア" And MyStr <= "ヶ") Or _ (MyStr >= "ヲ" And MyStr <= "ン") Then '****** ヲとンを半角に書き換えてください。 MyStr = Left(MyRange.Value, i - 1) & _ "(" & Right(MyRange.Value, MyLen - i + 1) & ")" MyRange.Value = MyStr Exit For End If Next End Sub Sub KakkoHuka_Suuji(MyRange As Range) '************************************************** ' 指定セルの数字を()で括る '************************************************** Dim MyLen As Integer Dim i As Integer Dim MyStr As String MyLen = Len(MyRange.Value) For i = 1 To MyLen MyStr = Mid(MyRange.Value, i, 1) If (MyStr >= "0" And MyStr <= "9") Or _ (MyStr >= "0" And MyStr <= "9") Then MyStr = Left(MyRange.Value, i - 1) & _ "(" & Right(MyRange.Value, MyLen - i + 1) & ")" MyRange.Value = MyStr Exit For End If Next End Sub Sub KakkoHuka_Kanji(MyRange As Range) '************************************************** ' 指定セルの漢字を()で括る '************************************************** Dim MyLen As Integer Dim i As Integer Dim MyStr As String MyLen = Len(MyRange.Value) For i = 1 To MyLen MyStr = Mid(MyRange.Value, i, 1) If (MyStr >= "亜" And MyStr <= "腕") Or _ (MyStr >= "弌" And MyStr <= "瑤") Then MyStr = Left(MyRange.Value, i - 1) & _ "(" & Right(MyRange.Value, MyLen - i + 1) & ")" MyRange.Value = MyStr Exit For End If Next End Sub
お礼
ご回答ありがとうございました。 お礼が遅くなって申し訳ありません。
1.範囲を選択 2.セルの書式設定 3.表示形式タブの分類をユーザー定義にする 4.種類に(@)→ENTER 数字だけでしたら数字を文字列として回答(1)として以下コピーでどうでしょうか。
補足
ご回答有難うございます。 やってみましたが、質問掲示板シツモンケイジバンが(質問掲示板シツモンケイジバン)と なってしまいます…。 カタカナや数字のみ挟むというのは、数字のみある文字列を、という意味ではなくて 漢字等他の文字と数字が続いている時に数字だけ挟みたいという意味です。 「12345あいうえお」を「(12345)あいうえお」としたいという事です。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 一般の関数のみの処理の仕方を考えてみました。 例: A1~A4 質問掲示板シツモンケイジバン 回答投稿カイトウトウコウ 質問掲示板シツモンケイジバン 回答投稿カイトウトウコウ 一応、30文字以内ということにしましたが、それ以上でした、ROW($A$1:$A$30)を広げてください。 B1:~B2: =LEFT(A1,LEN(A1)-COUNT(FIND(TRUE,CODE(MID(A1,ROW($A$1:$A$30),1))<12321)))&"("&RIGHT(A1,COUNT(FIND(TRUE,CODE(MID(A1,ROW($A$1:$A$30),1))<12321)))&")" 配列数式ですから、一旦式を入力したら、目的の式にF2を押して、『ShiftとCtrlを押しながらEnterキー』を押します。 そして、フィルダウン・コピー B3:~B4: ="("&LEFT(A3,LEN(A3)-COUNT(FIND(TRUE,CODE(MID(A3,ROW($A$1:$A$30),1))<12321)))&")"&RIGHT(A3,COUNT(FIND(TRUE,CODE(MID(A3,ROW($A$1:$A$30),1))<12321))) こちらも、配列数式ですから、上記と同じ手順が必要です。 なお、VBAで処理したほうが簡単かもしれません。
補足
ご回答有難うございます。 ですが、すいません。ちんぷんかんぷんです…_| ̄|○ 関数は「関数の貼り付け」以外使った事ありません…。
お礼
ご回答有難うございました。 置換え出来ました!助かりました。感謝します。 解決しましたが、漢字と数字も出来れば知りたいので、もうしばらく開けておきます。