VBA Byte数指定で左から文字列を切り取る

VBAでByte数を指定して文字列を切り取る処理のサンプルです。

VBAでは内部の文字コードがUnicodeの為、半角も全角も2Byteとして扱われます。そのため、LenB関数を利用しても、半角の1234も全角の1234も同じ8byte となります。

このサンプルは、半角を1byte全角を2byteと判定し、左から指定されたbyte数分の文字列を切り取って返却する関数になります。

'----------------------------------------------------------------------------
' Summary. Byte数で文字列切り取り.
' Param str:元の文字列.
' Param length:切り取るByte数を指定.
'----------------------------------------------------------------------------
Function GetLeftB(ByVal str As String, ByVal length As Integer)
    Dim temp As String
    temp = str
    Do Until LenB(StrConv(temp, vbFromUnicode)) <= length
        If LenB(StrConv(temp, vbFromUnicode)) > length Then
            temp = Left(temp, Len(temp) - 1)
        End If
    Loop
    GetLeftB = temp
End Function

上記のサンプルでは、文字列長を検証する際に、Unicodeからシステムの既定のコードページに変換した上で検証を行うことで半角を1byte全角を2byteとして判断できるようにしています。

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