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として判断できるようにしています。