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 fncSJIStoJIS(ByVal Source As String) As String Dim i As Long '汎用指数 Dim lngHigh As Long '上位バイト Dim lngLow As Long '下位バイト Dim lngCode As Long 'コード '全角にする Source = StrConv(Source, vbWide) '文字数分だけ処理する For i = 1 To Len(Source) 'シフトJISコードを取得 lngCode = Asc(Mid$(Source, i, 1)) If (lngCode < 0) Then lngCode = lngCode + &H10000 End If 'シフトJISコードからJIS区点コードを求める lngHigh = lngCode \ &H100 '上位バイトの処理 If (lngHigh < &HE0) Then lngHigh = lngHigh - &H81 '&H81-&H9F → &H00-&H1E Else lngHigh = lngHigh - &HC1 '&HE0-&HEF → &H1F-&H2E End If lngHigh = lngHigh * 188 '94区×2=188 lngLow = lngCode Mod &H100 '下位バイトの処理 If (lngLow < &H80) Then lngLow = lngLow - &H40 '&H40-&H7E → &H00-&H3E Else lngLow = lngLow - &H41 '&H80-&HFC → &H3F-&HBB End If lngCode = lngHigh + lngLow 'JIS区点コード 'JIS区点コードからJISコードを求める lngHigh = lngCode \ 94 '区の処理 lngHigh = lngHigh + &H21 '&H21を足す lngLow = lngCode Mod 94 '点の処理 lngLow = lngLow + &H21 '&H21を足す '変換結果の文字列を作成する fncSJIStoJIS = fncSJIStoJIS & Chr$(lngHigh) & Chr$(lngLow) Next i End Function
参考にしたサイトはありません。
使い方
VBAの中から関数として呼び出します。
パラメータには変換したいJISコードの文字列を指定します。
'関数のテスト処理 Sub Main() Dim strJIS As String Dim strSJIS As String strSJIS = "こんにちは初めまして。ぽぽろん@ぽぽづれ。です。" strJIS = fncSJIStoJIS(strSJIS) MsgBox "変換前(SJIS):" & vbCrLf & strSJIS & vbCrLf & vbCrLf & "変換後(JIS):" & vbCrLf & strJIS, vbInformation End Sub
結果としてSJISコードの文字列が入ってきます。
参考
シフトJISコード表
シフトJISコード表
では、この辺で。(^-^)o
コメント