Excel/VBA入門: 英数字を半角に変換し、半角カナを全角に変換する。
以前、某所に掲載したものの改良版です。
ワークシートに入力された文字列について、英数字や片仮名のように半角(1Byte)と全角(2Byte)の文字が存在するものをどちらか一方に統一したいということが良くある。この場合、VBAのStrConv関数を使用して全てのセルの文字列を一括変換すれば良い。
str = StrConv(str, vbNarrow) ' 文字列を半角(1Byte)に変換する。 str = StrConv(str, vbWide) ' 文字列を全角(2Byte)に変換する。
しかし、英数字は半角に統一したいが、「いわゆる半角カナ」などと呼ばれ過去に多くの問題を引き起こしてきた半角カナ(0xA1-0xCF)だけは全角に変換したいという場合、StrConvなどの既存の関数では一度に変換できないため、少し工夫が必要となる。
というわけで、英数字を半角に変換し、半角カナを全角に変換するプロ-シージャーを作成してみた。
Sub ToHankakuWithoutKatakana() ' ' 現在のワークシートの値が入力されている全てのセルについて、 ' 半角変換可能な全角文字を全て半角に変換する。 ' ただし、半角カナ(0xA1-0xCF)については全角に変換する。 ' また、可能であればカナ文字と直後の濁点・半濁点が合成される。 ' ' 2011/09/25 hichon: 新規作成。 ' Dim re As Object Dim Cell As Range Dim Str As String Dim Match As Object ' ' 正規表現オブジェクトを作成する。 ' 1文字以上の半角カナ(0xA1-0xCF)を検索対象とする。 ' Set re = CreateObject("VBScript.RegExp") re.Pattern = "[。-゚]+" re.Global = True ' ' 値が入力されている全てのセルについて、変換処理を実行する。 ' 尚、値が入力されているセルが存在しない場合、エラーとなる。 ' On Error GoTo Error For Each Cell In Cells.SpecialCells(xlCellTypeConstants, xlTextValues) Str = Cell.Value If Str <> "" Then ' ' 半角変換可能な文字を半角に変換する。 ' 全角カナもいったん半角カナに変換される。 ' Str = StrConv(Str, vbNarrow) ' ' 半角カナを全角に変換する。 ' 半角カナの直後に濁点・半濁点があればここで合成される。 ' For Each Match In re.Execute(Str) Str = Replace(Str, Match, StrConv(Match, vbWide), , 1) Next Cell.Value = Str End If Next Exit Sub Error: MsgBox Err.Description End Sub
« 昨日はTechLIONに参加してきた。 | トップページ | TeX入門: TeXの出力環境を作成する。(その1、Windows版) »
「Excel」カテゴリの記事
- Excel/VBA入門: 英数字を半角に変換し、半角カナを全角に変換する。(2011.09.25)
- Excel入門: CSVファイルをダブルクリックで開いたとき、数値の先頭の0が削除されないようにする。(増補版)(2011.09.01)
- EXCEL入門: 時間を切り上げ、切り捨て、四捨五入する。(2011.08.16)
「Windows」カテゴリの記事
- TeX入門: TeXの出力環境を作成する。(その1、Windows版)(2011.10.06)
- Excel/VBA入門: 英数字を半角に変換し、半角カナを全角に変換する。(2011.09.25)
- Eclipse入門: 日本語APIドキュメントをローカル環境、及び、ホバー表示で使用する。(2011.09.19)
- Excel入門: CSVファイルをダブルクリックで開いたとき、数値の先頭の0が削除されないようにする。(増補版)(2011.09.01)
- Windows入門: エクスプローラーの新規作成の「テキストドキュメント」を復活させる。(2011.08.28)
「VBA」カテゴリの記事
- Excel/VBA入門: 英数字を半角に変換し、半角カナを全角に変換する。(2011.09.25)
コメント
« 昨日はTechLIONに参加してきた。 | トップページ | TeX入門: TeXの出力環境を作成する。(その1、Windows版) »
アドインを使ったほうが便利です。
投稿: ExcelDevTool | 2014年6月10日 (火) 16時02分
調べたこと
Application.Asc(対象)をStrConv(対象, vbNarrow)の代わりに使ってみようと思います。
http://www.excel.studio-kazu.jp/kw/20131102091107.html
http://www.excel.studio-kazu.jp/kw/20080609102645.html
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11120727876
投稿: 竹田 | 2014年2月 8日 (土) 21時50分
「英数字を半角に変換し、半角カナを全角に変換する。」
このマクロを便利に使わせていただいております。
自分の環境では動作するのですが、同僚の環境では実行時エラー'5'というのがでてしまいます。
Excelは2010で同じです。OSが私は8.1 x86で同僚が7 x64です。関係ないかもしれませんが・・
はたしてなにが原因でしょうか。
知恵袋にも質問しています。
投稿: 竹田 | 2014年2月 8日 (土) 16時40分