5バイト取得という事でガチガチに作っていますが、
必要なら引数を調整して汎用的にして下さい。
Sub TEST()
Dim pos As Integer
Dim s As String
s = "123あいう"
pos = Left5(s)
Debug.Print StrConv(MidB$(StrConv(s, vbFromUnicode), 1, pos), vbUnicode), StrConv(MidB$(StrConv(s, vbFromUnicode), pos + 1), vbUnicode)
s = "4え5おか"
pos = Left5(s)
Debug.Print StrConv(MidB$(StrConv(s, vbFromUnicode), 1, pos), vbUnicode), StrConv(MidB$(StrConv(s, vbFromUnicode), pos + 1), vbUnicode)
End Sub
Function Left5(ByVal vstr As String) As Integer
'切る位置が全角文字の真中かどうか判定する
If Len(StrConv(LeftB(StrConv(vstr, vbFromUnicode), 5), vbUnicode)) _
= Len(StrConv(LeftB(StrConv(vstr, vbFromUnicode), 4), vbUnicode)) Then
'1バイト前で切ったときに文字数が変わらないのは切った位置が全角文字の後半であるので
'切り位置が正しいと判断する
Left5 = 5
Else '泣き別れのパターン
Left5 = 4
End If
End Function
お礼
回答ありがとうございました。 私の質問の仕方が悪かったのか、意図したものとズレがありました・・・申し訳ないです。