VBAで「JISコードの文字列」を「シフトJISコードの文字列」に変換します。
「JISコードの文字列」を「シフトJISコードの文字列」へ変換する
Microsoft ExcelのVisual Basic for Applicationsには文字コード変換の機能がありません。
今回は「JISコードの文字列」を「シフトJISコードの文字列」に変換する関数を作成してみました。
作成した関数を追加する
Microsoft Excelを起動したら、[Alt]+[F11]を押してVBAのエディタ(VBE)を開きます。
VBAのエディタを開いたら、プロジェクト エクスプローラーで右クリック→[挿入]→[標準モジュール]を選んで標準モジュールを追加して、以下を貼り付けてください。
Option Explicit 'JISをシフトJISに変換する Ver.1.2 @popozure Function fncJIStoSJIS(ByVal Source As String) As String Dim i As Long '汎用指数 Dim lngHigh As Long '上位バイト Dim lngLow As Long '下位バイト Dim lngCode As Long 'コード Dim lngLength As Long '文字数 '半角にする Source = StrConv(Source, vbNarrow) '文字数(偶数で無い場合、終了) lngLength = Len(Source) If (lngLength Mod 2 <> 0) Then Exit Function End If '文字数分だけ処理する For i = 1 To lngLength Step 2 '2バイトJISコードから句点コードを計算する lngHigh = Asc(Mid$(Source, i, 1)) '上位バイトの処理 lngHigh = lngHigh - &H21 '&H21を引いて、JIS区点コードの区を求める lngLow = Asc(Mid$(Source, i + 1, 1)) '下位バイトの処理 lngLow = lngLow - &H21 '&H21を引いて、JIS区点コードの点を求める lngCode = lngHigh * 94 + lngLow 'JIS区点コード '句点コードからシフトJISコードを計算する lngHigh = Int(lngCode / 188) '上位バイトの処理 If (lngHigh < &H1F) Then lngHigh = lngHigh + &H81 '&H00-&H1E → &H81-&H9Fにシフトする Else '&HA0-&HDFは半角カナなので抜かす lngHigh = lngHigh + &HC1 '&H1F-&H2E → &HE0-&HEFにシフトする End If lngHigh = lngHigh * &H100 lngLow = lngCode Mod 188 '下位バイトの処理 If (lngLow < &H3F) Then lngLow = lngLow + &H40 '&H00-&H3E → &H40-&H7Eにシフトする Else '&H7FはDELなので抜かす lngLow = lngLow + &H41 '&H3F-&HBB → &H80-&HFCにシフトする End If '変換結果の文字列を作成する fncJIStoSJIS = fncJIStoSJIS & Chr$(lngHigh + lngLow) Next i End Function
参考にしたサイトはありません。
使い方
VBAの中から関数として呼び出します。
パラメータには変換したいJISコードの文字列を指定します。
'関数のテスト処理 Sub Main() Dim strJIS As String Dim strSJIS As String strJIS = "$3$s$K$A$O=i$a$^$7$F!#$]$]$m$s!w$]$]$E$l!#$G$9!#" strSJIS = fncJIStoSJIS(strJIS) MsgBox "変換前(JIS):" & vbCrLf & strJIS & vbCrLf & vbCrLf & "変換後(SJIS):" & vbCrLf & strSJIS, vbInformation End Sub
結果としてSJISコードの文字列が入ってきます。
参考
JISコード表
JISコード表
では、この辺で。(^-^)o
コメント