2008年08月05日

【Excel VBA】全角カナを半角カナにするFunction

全角カナを半角カナに変換するお仕事があったのでメモ。
全角の漢字やひらがなはそのままで、なぜかカタカナだけ半角にしろという。いまどき半角カナってねぇ〜。21世紀ですぜ、ダンナ。

Excel VBAで全角カナを半角カナにするファンクションです。
str = ZenKana2HanKana(str) で変換できます。

ミソは長音(ー)が共通のコードなので、1文字前がカナだったら半角に変換するようにしています。

VBAなんて久々でこれでいいのか不安ですが、まぁ、動いてます(w

ソースそのままなので半角カナが入ってますが…スイマセン。


'//=========================================
'// ZenKana2HanKana
'//-----------------------------------------
'// 全角カナを半角カナにして返す
'//=========================================
Private Function ZenKana2HanKana(pStr As String) As String
Dim i As Integer
Dim str1 As String
Dim preStrKanaFlg As Boolean
ZenKana2HanKana = ""
'// 1文字前の文字がカナかどうか判断するフラグ
'// ー(長音)を判断するために使う
preStrKanaFlg = False
'// 文字列数ぶんだけ繰り返す
For i = 1 To Len(pStr)
str1 = Mid(pStr, i, 1)
'// ア〜ミ(0x8340〜0x837E)
'// ム〜ワ(0x8380〜0x838F)
'// ヰヱ(0x8390、0x8391)これは変換できないのでイエにする
'// ヲン(0x8392、0x8393)
'// ヴヵヶ(0x8394〜0x8396)ヵヶは変換しても全角なのでカケにする
'// 0x837Fは未定義文字となっている
'// 理由は「0x837f」でググれ
'// Shift-JISの文字では 2byteの文字の中で
'// 2byteめが 0x7F となる文字は定義されていません。
If ChkZenKana(str1) Then
'// 通常以外のカナの場合は特別に処理する
Select Case str1
Case "ヰ"
ZenKana2HanKana = ZenKana2HanKana & "イ"
Case "ヱ"
ZenKana2HanKana = ZenKana2HanKana & "エ"
Case "ヵ"
ZenKana2HanKana = ZenKana2HanKana & "カ"
Case "ヶ"
ZenKana2HanKana = ZenKana2HanKana & "ケ"
Case Else
ZenKana2HanKana = ZenKana2HanKana & StrConv(str1, vbNarrow)
End Select
'// 1文字前カナフラグを立てる
preStrKanaFlg = True
Else
'//1文字前がカナ、かつ"ー"(長音)の場合はカナの長音として判断
If str1 = "ー" And preStrKanaFlg = True Then
ZenKana2HanKana = ZenKana2HanKana & "ー"
Else
ZenKana2HanKana = ZenKana2HanKana & str1
End If
'// 1文字前カナフラグを消す
preStrKanaFlg = False
End If
Next
End Function
 
 
'//=========================================
'// ChkZenKana
'//-----------------------------------------
'// 文字列中に1文字でも全角カナがあればTrueを返す
'//=========================================
Private Function ChkZenKana(pStr As String) As Boolean
Dim i As Integer
Dim str1 As String
ChkZenKana = False
For i = 1 To Len(pStr)
str1 = Mid(pStr, i, 1)
'// ア〜ミ(0x8340〜0x837E)
'// ム〜ワ(0x8380〜0x838F)
'// ヰヱ(0x8390、0x8391)
'// ヲン(0x8392、0x8393)
'// ヴヵヶ(0x8394〜0x8396)
'// 0x837Fは未定義文字となっている
'// 理由は「0x837f」でググれ
'// Shift-JISの文字では 2byteの文字の中で
'// 2byteめが 0x7F となる文字は定義されていません。
If (&H8340 <= Asc(str1) And Asc(str1) <= &H8396) _
And Asc(str1) <> &H837F Then
ChkZenKana = True
Exit Function
End If
Next
End Function


タグ:VBA EXCEL

posted by まきすけ at 23:25 | Comment(0) | TrackBack(2) | Linuxとか
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/104252402

この記事へのトラックバック

半角カナ全角カナ変換、機種依存文字、外字のあれこれ
Excerpt: 先日のExcelVBAでの全角カナ→半角カナ変換の際に参考として調べたサイトをメモ。 ・Webマスターのための文字化け講座 機種依存文字チェックするプログラム ・ASH multimedia lab..
Weblog: 猫ぐらし
Tracked: 2008-08-07 16:18

エクセル便利手帳はVBAを利用して操作の手順を簡略します。エクセルファイルなので間単に加工できます。
Excerpt: 簡単操作で楽々管理!スケジュール管理・名刺管理・ファックス送付状作成
Weblog: 情報商材レビューinfo-chance.com
Tracked: 2009-03-11 10:20