プロが教える店舗&オフィスのセキュリティ対策術

Excelで、一定条件の文字を一括で()で挟みこむ置換え方法を教えてください。
一定条件は、例えばカタカナのみ()で挟むという指定です。

質問掲示板シツモンケイジバン
回答投稿カイトウトウコウ

質問掲示板(シツモンケイジバン)
回答投稿(カイトウトウコウ)

応用で、漢字のみ挟む方法と、数字のみ挟む方法も知りたいです。
よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/07/08 15:38

#5 の訂正です。



漢字の検索について
私の書いたものは、JIS漢字のフルサポートをしていません。

 "[一-钁]+")

JISの第二水準の途中までになっています。実務的には問題はないかもしれませんが、JIS文字の最後までに訂正します。

訂正後
"[一-龝]+")

もし、Unicode 文字フルサポートするのでしたら、
"[\u4E00-\u9FA5\uF900-\uFA2D]+"

このようになります。
なお、Excelのワークシート上では、標準では、Unicode文字は使いません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/20 17:12

こんばんは。


#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
'--------------------------------------------
    • good
    • 0

それぞれのサブルーチンだけですが、以下に示します。


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/20 17:12

1.範囲を選択


2.セルの書式設定
3.表示形式タブの分類をユーザー定義にする
4.種類に(@)→ENTER

数字だけでしたら数字を文字列として回答(1)として以下コピーでどうでしょうか。

この回答への補足

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

補足日時:2005/07/08 20:48
    • good
    • 0

こんにちは。



一般の関数のみの処理の仕方を考えてみました。

例:
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で処理したほうが簡単かもしれません。

この回答への補足

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

補足日時:2005/07/08 11:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!