- ベストアンサー
Excelで、ワークシート内の半角・全角変換
いつもお世話になっております。 人からもらったファイルをくっつけて、一つの報告書を作っているとします。 すると人によって、半角・全角の基準がバラバラになります。 パソコンに関しては几帳面な私は ・漢字・ひらがな・カタカナは全角 ・英数字・記号は半角 で統一したいのです。 現在はいちいち直しておりますが、関数などを使用して簡単に変換できる方法は無いでしょうか。 ASC関数だとカタカナまで半角になってしまうので使えないのです。 よろしくご教授願います。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
私が以前作ったものを再点検した、正規表現置換の改良型です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1353408 Alt+F11 で画面を切り替えます。(元に戻るときも、Alt+F11で戻れます) 挿入-標準モジュールで、現れた画面に、以下を貼り付けます。 後は、マクロ-マクロ-Han2Zen を選ぶか、フォームのメニューでボタンにマクロを登録したりすると、便利です。 '--------------------------------------------------------- '<標準モジュール設定> Sub Han2Zen() '英数字・記号半角変換 'Excel限定型 Wendy02 in Goo 05/05/19 Dim objRe As Object Dim Rng As Range Dim myPattern As String Dim buf As String Dim soc As String Dim c As Variant Set objRe = CreateObject("VBScript.RegExp") Set Rng = Selection 'マウスで選択します。 '正規表現パターン myPattern = "([" & Chr(166) & "-" & Chr(223) & "]+)" '半角カタカナ:Web上では禁じられているためで、[ヲ-゛]はそのまま入れられます 'セル上で、=Char(166)などとすれば文字が分かります。166~223までです With objRe .Pattern = myPattern .Global = True For Each c In Rng If VarType(c) = vbString Then soc = StrConv(c, vbNarrow) Set Matches = .Execute(soc) For Each Match In Matches buf = StrConv(Match, vbWide) 'パターンにあった部分は全角にしています。 soc = Replace(soc, Match, buf) '* Next c.Value = soc 'セルに出力 End If Next Set objRe = Nothing End With End Sub '--------------------------------------------------------- * Excel2000以上の機能です。 それ以下の場合は、 soc =Application.Substitute(soc,Match,buf) としてください。 Excel限定: このプログラムの考え方は、一旦、全ての文字列を半角できるものは半角にさせ、その中で、全角にしなければならない「半角カタカナ」を全角にするというものです。濁点・半濁点付き半角カタカナが自動的に全角カタカナになるのは、Excel上のみの機能です。通常は、半角文字1つに対して全角になるので、他のVB/VBAでは、正規表現を使った方法は、このままでは使えません。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
すみません。ちょっと、モジュールの中が整理をされていないもので、明示的宣言(Option Explicit)を抜いていました。 Dim Matches As Object Dim Match As Object それと、パターンのところを以下に換えたほうがよいかもしれません。()付けは意味がありません。 myPattern = "[" & Chr(166) & "-" & Chr(223) & "]+" 後は、範囲指定さえしていればよいはずですが……
お礼
うまくできました! Wendy02さんありがとうございます。 そして回答いただいた皆様もありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>コンパイルエラー Matches があらかじめ宣言されていないとか?
お礼
アドバイスありがとうございます。 そうかもしれません。 素人ながらモノは試しだと思い、自分で勝手にMatchesとMatchの変数定義(わからなかったのでVariantとしました)をしたところ、コンパイルエラーは出なくなりました。 ただ、それがまずいのか、テスト用ファイルの一部で全角カタカナが半角になったままという現象がありました。
- Wendy02
- ベストアンサー率57% (3570/6232)
そのエラーの次の行に何か書かれていますか? 例えば、「修正候補...」など。 単に、コンパイルエラーですと、コードの行の中で、どこか赤い字になっていませんか? 文章のコメント行でしたら、削除するか、行の最初に「'」(アポストロフィ)をつければ解消されるはずです。 本来のコードは、Sub ~End Sub までです。 もし、分からないようでしたら、その個所を教えてください。お願いします。
お礼
再度の登場ありがとうございます。 Matchesのところに印が行き、「変数が定義されていません」と出ます。
全角に統一したいのなら、 関数で(文字列操作のJIS)で出来ます。 =JIS()
お礼
ちゃんと質問を読んでくださいね。頼むから。 でもありがとう。
- mshr1962
- ベストアンサー率39% (7417/18945)
1.フリーソフトを導入する 2.ユーザー定義関数を作る 3.マクロで置換する のいずれかだと... フリーソフトなら http://www.vector.co.jp/soft/win95/business/se250656.html
お礼
回答ありがとうございます。 2のユーザー定義関数というのは、よくわからないので調べてみます。 1は、本末転倒になるのでちょっと避けたいところです。
お礼
回答ありがとうございます。 当方Excel2002ですがマクロ実行するとコンパイルエラーが発生します。 VBAは詳しく無いのですが、転記のやり方は多分間違っていないと思います。