ぶっちゃけた話、StrConv もどきである。
Private Declare Function LCMapString Lib "kernel32" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long Private Const LCMAP_LOWERCASE = &H100 Private Const LCMAP_UPPERCASE = &H200 Private Const LCMAP_SORTKEY = &H400 Private Const LCMAP_BYTEREV = &H800 Private Const LCMAP_HIRAGANA = &H100000 Private Const LCMAP_KATAKANA = &H200000 Private Const LCMAP_HALFWIDTH = &H400000 Private Const LCMAP_FULLWIDTH = &H800000 Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long '定数(列挙型) Public Enum StrConvValue LOW_TO_UPPER '小文字→大文字 UPPER_TO_LOW '大文字→小文字 ZEN_TO_HAN '全角→半角 HAN_TO_ZEN '半角→全角 HIR_TO_KAT '全角ひらがな→全角カタカナ KAT_TO_HIR '全角カタカナ→全角ひらがな ZEN_TO_HAN_EX '全角→半角(全角ひらがな→半角カタカナも含む) End Enum '--------------------------------------------------------------------------- ' 関数名 : StrConvEx ' 機 能 : 文字コードを変換する ' 引 数 : (in)SrcText … 変換対象文字列 ' (in)ConvFlag … 変換指定フラグ ' 返り値 : 変換された文字列 '--------------------------------------------------------------------------- Public Function StrConvEx(ByVal SrcText As String, ByVal ConvFlag As StrConvValue) As String Dim ConvTextBuff As String Dim MapFlag As Long Dim LocalID As Long 'ロケールID '文字列バッファを確保(半角→全角の時は2倍) ConvTextBuff = String$(lstrlen(SrcText) * IIf(ConvFlag = HAN_TO_ZEN, 2, 1), Chr$(0)) Select Case ConvFlag Case LOW_TO_UPPER '小文字→大文字 MapFlag = LCMAP_UPPERCASE Case UPPER_TO_LOW '大文字→小文字 MapFlag = LCMAP_LOWERCASE Case ZEN_TO_HAN '全角→半角 MapFlag = LCMAP_HALFWIDTH Case HAN_TO_ZEN '半角→全角 MapFlag = LCMAP_FULLWIDTH Case HIR_TO_KAT '全角ひらがな→全角カタカナ MapFlag = LCMAP_KATAKANA Case KAT_TO_HIR '全角カタカナ→全角ひらがな MapFlag = LCMAP_HIRAGANA Case ZEN_TO_HAN_EX '全角→半角(全角ひらがな→半角カタカナも含む) MapFlag = LCMAP_KATAKANA Or LCMAP_HALFWIDTH End Select 'ロケールIDを取得 LocalID = GetSystemDefaultLCID() '文字列変換 Call LCMapString(LocalID, MapFlag, SrcText, -1, ConvTextBuff, Len(ConvTextBuff)) 'NULL削除 StrConvEx = strNullCut(ConvTextBuff) End Function '--------------------------------------------------------------------------- ' 関数名 : strNullCut ' 機 能 : 文字列を vbNullChar までを取得する ' 引 数 : (in) srcStr … 対象文字列 ' 返り値 :編集された文字列 '--------------------------------------------------------------------------- Public Function strNullCut(ByVal srcStr As String) As String Dim NullCharPos As Integer NullCharPos = InStr(srcStr, Chr$(0)) If NullCharPos = 0 Then strNullCut = srcStr Exit Function End If strNullCut = Left$(srcStr, NullCharPos - 1) End Function |