英数文字列を半角または全角に変換
VB、VBAだとStrConvという便利な関数が使えるのだが、
VBSに該当または同等の関数が無い為作ってみた。
英数のみで言えば文字コードを一定量シフトさせることで
半角または全角変換は難なく実現した。
記号及びカタカナに関してはシフトJISの場合
文字の並びに類似性が無く、
煩雑な実装が必要だったので非対応とした。
(1文字づつ判定して処置してく事になる。)
当初の目的が自作VBSで受け取った
ASIN/ISBNの全角文字列を半角に変換だったから、
これはこれで良しとする。
(余談だが、追加インストールを厭わなければ、
BASP21.DLLを導入することで、
COMコンポーネントからStrConvが使える模様。)
英数全半角変換.vbs
Option Explicit 'ASCII <-> Shift_JIS 文字コード変換補数 Const SHIFT_CODE = &H7DE1 Dim input '全角英数→半角変換テスト input = InputBox("全角英数を半角に変換します。", "全角英数を半角に変換") WScript.Echo "入力: " & input & vbCrLf & _ "出力: " & StrConvNarrow(input) '半角英数→全角変換テスト input = InputBox("半角英数を全角に変換します。", "半角英数を全角に変換") WScript.Echo "入力: " & input & vbCrLf & _ "出力: " & StrConvWide(input) 'サブルーチン '指定した文字列の全角英数を半角に変換して返す Function StrConvNarrow(strWide) Dim length, index, retStr, retChar, tempChar, tempCode retStr = "" StrConvNarrow = retStr length = Len(strWide) For index = 1 To length tempChar = Mid(strWide, index, 1) tempCode = Asc(tempChar) If (tempCode >= &H824F And tempCode <= &H8258) Or _ (tempCode >= &H8260 And tempCode <= &H8279) Then '文字コードが Shift_JIS 0~9: &H824F~&H8258 'または A~Z: &H8260~&H8279 だった場合 retChar = Chr(tempCode + SHIFT_CODE) ElseIf tempCode >= &H8281 And tempCode <= &H829A Then '文字コードが Shift_JIS a~z: &H8281~&H829A だった場合 retChar = Chr(tempCode + SHIFT_CODE - 1) Else '文字コードが変換対象外だった場合 retChar = tempChar End If retStr = retStr & retChar Next StrConvNarrow = retStr End Function '指定した文字列の半角英数を全角に変換して返す Function StrConvWide(strNarrow) Dim length, index, retStr, retChar, tempChar, tempCode retStr = "" StrConvWide = retStr length = Len(strNarrow) For index = 1 To length tempChar = Mid(strNarrow, index, 1) tempCode = Asc(tempChar) If (tempCode >= &H30 And tempCode <= &H39) Or _ (tempCode >= &H41 And tempCode <= &H5A) Then '文字コードが ASCII 0~9: &H30~&H39 'または A~Z: &H41~&H5A だった場合 retChar = Chr(tempCode - SHIFT_CODE) ElseIf tempCode >= &H61 And tempCode <= &H7A Then '文字コードが ASCII a~z: &H61~&H7A だった場合 retChar = Chr(tempCode - SHIFT_CODE + 1) Else '文字コードが変換対象外だった場合 retChar = tempChar End If retStr = retStr & retChar Next StrConvWide = retStr End Function