• ベストアンサー

Excelで一定条件の文字を()で挟む方法

Excelで、一定条件の文字を一括で()で挟みこむ置換え方法を教えてください。 一定条件は、例えばカタカナのみ()で挟むという指定です。 例 質問掲示板シツモンケイジバン 回答投稿カイトウトウコウ ↓ 質問掲示板(シツモンケイジバン) 回答投稿(カイトウトウコウ) 応用で、漢字のみ挟む方法と、数字のみ挟む方法も知りたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ta123
  • ベストアンサー率51% (95/186)
回答No.2

とりあえず、カタカナを()で挟むマクロを作ってみました。閉じ括弧は文字列の最後につけるようになっています。 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

RYOKUYA
質問者

お礼

ご回答有難うございました。 置換え出来ました!助かりました。感謝します。 解決しましたが、漢字と数字も出来れば知りたいので、もうしばらく開けておきます。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#5 の訂正です。 漢字の検索について 私の書いたものは、JIS漢字のフルサポートをしていません。  "[一-钁]+") JISの第二水準の途中までになっています。実務的には問題はないかもしれませんが、JIS文字の最後までに訂正します。 訂正後 "[一-龝]+") もし、Unicode 文字フルサポートするのでしたら、 "[\u4E00-\u9FA5\uF900-\uFA2D]+" このようになります。 なお、Excelのワークシート上では、標準では、Unicode文字は使いません。

RYOKUYA
質問者

お礼

ご回答ありがとうございました。 お礼が遅くなって申し訳ありません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 #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)
回答No.4

それぞれのサブルーチンだけですが、以下に示します。 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

RYOKUYA
質問者

お礼

ご回答ありがとうございました。 お礼が遅くなって申し訳ありません。

noname#113407
noname#113407
回答No.3

1.範囲を選択 2.セルの書式設定 3.表示形式タブの分類をユーザー定義にする 4.種類に(@)→ENTER 数字だけでしたら数字を文字列として回答(1)として以下コピーでどうでしょうか。

RYOKUYA
質問者

補足

ご回答有難うございます。 やってみましたが、質問掲示板シツモンケイジバンが(質問掲示板シツモンケイジバン)と なってしまいます…。 カタカナや数字のみ挟むというのは、数字のみある文字列を、という意味ではなくて 漢字等他の文字と数字が続いている時に数字だけ挟みたいという意味です。 「12345あいうえお」を「(12345)あいうえお」としたいという事です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 一般の関数のみの処理の仕方を考えてみました。 例: 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で処理したほうが簡単かもしれません。

RYOKUYA
質問者

補足

ご回答有難うございます。 ですが、すいません。ちんぷんかんぷんです…_| ̄|○ 関数は「関数の貼り付け」以外使った事ありません…。

関連するQ&A

  • 文字の順序を入れ替えるソフト

    カタカナ漢字の順になっている.txtがあります。 これを、漢字カタカナと、順序を逆にしたいのですが、 複数行を一括指定で入れ替える事が出来る方法 もしくはフリーソフトはありますでしょうか? 正規表現は使えないので、出来るだけ簡単に指定が可能なソフトが欲しいのです。 どうぞよろしくお願いします。 OSはWin2000です。Word、Excelは所有しています。

  • エクセルで一定範囲内に含まれる文字の数の数え方

    エクセルで、一定の範囲内に含まれる数字や文字列の、ダブりを省いた個数を数える関数(またはやり方)というのはありますか? 何と表現してよいのか分からないため、質問文が分かりにくくなっていしまいますが、例えばある行なり列なりに 1 2 3 4 3 2 1 10 20 30 10 20 30 10 20 とあった場合、ここに出てくる数字は1,2,3,4,10,20,30の7種類なので「7」という具合にカウントできる方法を探してます。

  • エクセルで半角文字をシートごと一括で変換したいのです

    エクセルで全角で入れなければいけない文字(カタカナ・数字・英字)を全て半角で入力してしまいました。一括で全て全角にすることはできますか?一括でなくても簡単に直す方法があれば教えてください。よろしくおねがいします

  • エクセルの半角入力について。

    エクセルで予め半角で入力している数字又はカタカナを一括で「全角」にするにはどうすればいいのでしょうか? そういう一括でできる方法はあるのでしょうか? 教えてください。

  • ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて

    ・エクセルで特定の条件に合う文字列を抜き出す方法を教えて 例のようにA列の文字の中からカッコ内(4桁数字“ハイフン”7桁数字)を B列に表示するにはどうしたらよいでしょうか。 ちょっと面倒なのはカッコは複数ある場合があり(xxxx-xxxxxxx)の条件に 合ったものだけを隣のセルに表示したいのです。 カッコとカッコ内は半角でxは不特定な数字です。 (例) A1=あいうえお(abcde)かきくけこ(xxxx-xxxxxxx)さしすせそ B1=xxxx-xxxxxxx よろしくお願いいたします。

  • エクセル2003で教えて下さい

    質問1 セルに文字を入れると、他の指定したセルにも同じ文字が出る方法はありますか? 例) 入力セル A1 漢字   指定セル J4 漢字 (数字の場合だとΣを使えばできるんですが、文字のバージョンがあれば宜しく御願いします) 質問2 入力セルにどんな数字を入力しても指定セルには1と出る方法はありますか? 例) 入力セル (A1) 5942   指定セル (J5) 1

  • EXCELのセルで使われている数字を一定毎に増やしたい。

    EXCELのセルで使われている数字を一定毎に増やしたい。 もしかしたら、似たような質問があったかもしれませんが見つけられなかったので質問します。 A1 =日報!D42 B1 =日報!D88 C1 =日報!D134    ・    ・    ・ と、いうように参照されている数字を一定数(ここでは46)毎に増やしたいのですが可能でしょうか? (実際は参照だけではなくIF等の関数が入ったりすることもあります) 数字のみならば二つ選んだ状態でフィルをすると可能なのは判るのですが・・・ どうかよろしくお願いします。 EXCELのバージョン:EXCEL2002

  • EXCELの置換 方法

    前回も似たような質問をさせていただいたのですが、 また似たような処理が出てきてしまったので質問させてください!! もしお分かりになる方がいらっしゃいましたらアドバイスいただけると嬉しいです。 よろしくお願いします!! コード番号の一括置換えをするにはどうすれば良いのか教えてください。!! <例> 00000X0-0 00111T0-1 00200S0-0 00003K0-0    ・    ・    ・    ・ 上記のような数字5桁/英字1文字/数字1桁/ハイフン/数字1桁 で表記されるコード番号があります。 このコード番号を数字3桁/英字1文字/数字2桁/ハイフン/数字2桁 で一括置換えしたいのですが、それは可能でしょうか? <例> 000X00-00 111T00-01 200S00-00 003K00-00 *英字の次の数字とハイフンの次の数字は“0”が挿入されます。 (下線の箇所です。) コード番号の数が600件程あるので、一括置換えができると とても時間短縮になるのですが、、、。 置換えでなく、他の方法で変換が出来るのでしたらそちらも 教えて頂ければと思います。 (難しいマクロとかはやったことがないのでできましたら関数の応用などで 出来るやり方を教えて頂ければ有難いです。) 宜しくご指導お願いします。!!

  • エクセルで条件付きランダム化を行う方法

    はじめまして。 エクセル初級者です(2007ユーザー)。 なるべくマクロ関数を使わずに、条件付きのランダム化をする方法を探しています。 具体的には、1~5の数字をランダムに並べる際、1度も重複せずに並べたいと思っています。  例) 5, 3, 2, 4 ,1  / 2, 1, 4, 3, 5 などなど どうもラテン方陣というものを作るのが1番早いようですが、 今一つ作り方が分かりません。 上記どちらでもかまいませんので、もしご存知の方がいらっしゃいましたら教えてください。 よろしくお願いします。

  • エクセル2003での条件付書式

     ある計算から、添付画像のような表計算が出来上がり、各グループ(1Gは3×4セル)に共通する数字を同色で塗りつぶしたいのですが、エクセル2003では、条件つき書式が3条件しか設定できません。4条件以上を設定することはできますか?  できれば自動で(数字を指定することなく)共通数字を塗りつぶしたいのですが方法はありますか? よろしくお願いします。

専門家に質問してみよう