半角カナは昔のコンピュータの名残です。
ホストコンピューターが主流だった頃は、1バイト文字(数字やアルファベット)しか表記できず、そこに各メーカーが半角カタカナも使えるようにしていました。
文字コードもJIS・EUC・EBCDIC等が使われており、EBCDICの半角カタカナはフランス語と一部同じコードになるというエンジニア泣かせの存在でした。
そんな半角カナですが、久しぶりにオンプレ開発の現場に戻ってみたら『バリバリ現役』でした。
業務システムで、画面に情報をギッシリ詰め込みたいという要望のようです。
- 画面は半角カナ
- DBのテーブル名は全角カナなのに、カラム名は半角カナ
- 設計書の地の文は全角カナ、画面・DBは各ルールに従う
画面は百歩譲るとして、DBのカラム名は論理名なのだから全角半角にこだわる意味ないと思うんですけどね。
設計書レビュワーも間違いを探すのが大変なレベルです(笑)。
Excel関数として、全角・半角変換は次の2つの関数があります。
- ASC:2バイト文字を1バイトにする
- JIS:1バイト文字を2バイトにする
対象は、英字・数字・カタカナ・記号です。
半角・全角、両方存在する文字を変換してくれます。
が、今回の私のように「半角カタカナのみ」変換したい時には使えません。
住所コード(ユーザ)
住所コード(ユーザ)
としたい場合、半角括弧はそのまま変えたくないのです。
(当然ですがExcelのフリガナ機能を使う方法は駄目です。漢字もフリガナになってしまうため)
そこで、マクロで処理します。
下のコードをマクロに登録して、Alt + F8キー で起動するだけです。
A) 半角⇒全角 を有効にしてあります。
B) 全角⇒半角 はコメントアウト(無効)にしているので、ご都合に合わせて有効/無効を切り替えてください。
あと、処理対象(行・列)の部分も自由に変えてください。
Sub 半角カナのみ全角に変換() ' ' JIS関数は、アルファベットや記号も全角にしてしまうので、 ' 半角カナ限定で、半角⇔全角 の変換ができるマクロ ' Dim myStr As String Dim Match As Object, Matches As Object Dim i As Long Dim LastRow As Long LastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行ゲット Dim hanKana As Integer Dim zenKana As Integer Dim fisName As Integer hanKana = 1 '半角カナはA列(読む) zenKana = 2 '全角カナはB列(書込む) fisName = 3 '物理名はC列(ブランクと0でなければ処理する) Dim sRow As Long sRow = 2 '処理開始行 With CreateObject("VBScript.RegExp") .Pattern = "[\uFF61-\uFF9F]+" 'A) 半角カナを文字コードで指定 ' .Pattern = "[\u30A0-\u30FF]+" 'B) 全角カナを文字コードで指定 .Global = True For i = sRow To LastRow myStr = Cells(i, hanKana) If Len(myStr) > 0 And Cells(i, fisName) <> 0 Then Set Matches = .Execute(myStr) 'マッチしたすべての文字列を置換 For Each Match In Matches myStr = Replace(myStr, Match.Value, _ StrConv(Match.Value, vbWide)) 'A) 半角⇒全角 ' myStr = Replace(myStr, Match.Value, _ ' StrConv(Match.Value, vbNarrow)) 'B) 全角⇒半角 Next Match Cells(i, zenKana) = myStr Else Cells(i, zenKana) = 0 End If Next i End With MsgBox "処理が終わりました" End Sub
今回はA列B列で固定にしていますが、Selection(選択したセルを対象)で処理すれば、自由度が上がると思います。
2020/01/10追記
選択したセルに対して、カタカナの全角半角変換を行うマクロを作りました。