VBAでJISコードの文字列をシフトJISコードの文字列に変換する

VBA
この記事は約5分で読めます。

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

コメント

タイトルとURLをコピーしました