半角のカタカナのみを全角に変換したい時がありますが、例えばEXCELの式だと、英数字も全角にしてしまったり、ひらがなや漢字もカタカナにしてしまったりと、あと一息です。
半角カタカナを含むCSVを読み込んで、全角カタカナに変換したCSVを吐き出すVBAを書きました。ご参考まで。
- ANSI Shift-JISのみ対応です。
- 一旦全角に変換した後、アルファベット、数字、記号を半角にします。
- ダブルクォーテーションは全角のままにしています。
ご利用は自由です。自分の環境では自分の期待通りに動いていますが、保証の限りではありませんので、利用は自己責任でお願いします m(..)m
Sub Main()
'変換元のファイル名を指定してください(ANSI Shift-JISのみ対応)
infile_name = "D:\変換元.csv"
'変換後のファイル名を指定してください
outfile_name = "D:\変換先.csv"
'変換元、変換後のファイルを開きます(変換元=読み取り専用 変換後=上書き)
Open infile_name For Input As #1
Open outfile_name For Output As #2
'ファイルを順次読み込みます
Do Until EOF(1)
Line Input #1, buf
'まず、すべてを全角文字に変換します
buf = StrConv(buf, 4)
outbuf = ""
For lp = 1 To Len(buf)
outbuf = outbuf & tohalf(Mid(buf, lp, 1))
Next lp
'1行中にカンマがひとつだけあることを確認します
If Len(outbuf) - Len(Replace(outbuf, ",", "")) <> 1 Then
MsgBox "カンマの数がひとつではありません[" & outbuf & "]"
End If
'変換結果を出力します
Print #2, outbuf
Loop
'変換元、変換後のファイルを閉じます
Close #2
Close #1
End Sub
'全角のアルファベット、数字、記号を半角に変換するサブルーチン(全角のダブルクォーテーションは半角に戻さない)
Function tohalf(str)
fullstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'()-^\@[;:],./\=~|`{+*}<>?_"
halfstr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'()-^\@[;:],./\=~|`{+*}<>?_"
tohalf = Replace(str, Chr(9), ",")
For lp = 1 To Len(fullstr)
If str = Mid(fullstr, lp, 1) Then
tohalf = Mid(halfstr, lp, 1)
Exit For
End If
Next lp
End Function