• ベストアンサー

Excelで、ワークシート内の半角・全角変換

いつもお世話になっております。 人からもらったファイルをくっつけて、一つの報告書を作っているとします。 すると人によって、半角・全角の基準がバラバラになります。 パソコンに関しては几帳面な私は  ・漢字・ひらがな・カタカナは全角  ・英数字・記号は半角 で統一したいのです。 現在はいちいち直しておりますが、関数などを使用して簡単に変換できる方法は無いでしょうか。 ASC関数だとカタカナまで半角になってしまうので使えないのです。 よろしくご教授願います。

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

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

私が以前作ったものを再点検した、正規表現置換の改良型です。 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では、正規表現を使った方法は、このままでは使えません。

baritsu
質問者

お礼

回答ありがとうございます。 当方Excel2002ですがマクロ実行するとコンパイルエラーが発生します。 VBAは詳しく無いのですが、転記のやり方は多分間違っていないと思います。

その他の回答 (5)

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

すみません。ちょっと、モジュールの中が整理をされていないもので、明示的宣言(Option Explicit)を抜いていました。 Dim Matches As Object Dim Match As Object それと、パターンのところを以下に換えたほうがよいかもしれません。()付けは意味がありません。 myPattern = "[" & Chr(166) & "-" & Chr(223) & "]+" 後は、範囲指定さえしていればよいはずですが……

baritsu
質問者

お礼

うまくできました! Wendy02さんありがとうございます。 そして回答いただいた皆様もありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>コンパイルエラー Matches があらかじめ宣言されていないとか?

baritsu
質問者

お礼

アドバイスありがとうございます。 そうかもしれません。 素人ながらモノは試しだと思い、自分で勝手にMatchesとMatchの変数定義(わからなかったのでVariantとしました)をしたところ、コンパイルエラーは出なくなりました。 ただ、それがまずいのか、テスト用ファイルの一部で全角カタカナが半角になったままという現象がありました。

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

そのエラーの次の行に何か書かれていますか? 例えば、「修正候補...」など。 単に、コンパイルエラーですと、コードの行の中で、どこか赤い字になっていませんか? 文章のコメント行でしたら、削除するか、行の最初に「'」(アポストロフィ)をつければ解消されるはずです。 本来のコードは、Sub ~End Sub までです。 もし、分からないようでしたら、その個所を教えてください。お願いします。

baritsu
質問者

お礼

再度の登場ありがとうございます。 Matchesのところに印が行き、「変数が定義されていません」と出ます。

noname#10867
noname#10867
回答No.2

全角に統一したいのなら、 関数で(文字列操作のJIS)で出来ます。 =JIS()

baritsu
質問者

お礼

ちゃんと質問を読んでくださいね。頼むから。 でもありがとう。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

1.フリーソフトを導入する 2.ユーザー定義関数を作る 3.マクロで置換する のいずれかだと... フリーソフトなら http://www.vector.co.jp/soft/win95/business/se250656.html

baritsu
質問者

お礼

回答ありがとうございます。 2のユーザー定義関数というのは、よくわからないので調べてみます。 1は、本末転倒になるのでちょっと避けたいところです。