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 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

コメント

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