VB6.0对全角半角字符串进行混合截位
'---------------------------------------------------------------------
' 文字列の先頭から指定した桁数を取り出す
' 引数: sData 処理前文字列
' iLen 取り出す桁数
' iMode 処理モード
' 戻り値:LeftString 処理後文字列
'----------------------------------------------------------------------
Function LeftString(ByVal sData As String, ByVal iLen As Integer, Optional ByVal iMode As Integer = 0) As String
' バイトデータを格納用
Dim bBuffer() As Byte
' 全角文字があるかどうか判定用
Dim bChinesePrev As Boolean
Dim iLoop As Integer
' 文字列をユニコードに転換する
bBuffer = StrConv(sData, vbFromUnicode)
bChinesePrev = False
iLoop = 0
' 全角文字があるかどうかを判定する
If iLen < UBound(bBuffer) + 1 Then
For iLoop = 0 To iLen - 1
If bBuffer(iLoop) >= 160 Then
bChinesePrev = Not bChinesePrev
End If
Next iLoop
End If
' 文字列の先頭から指定した桁数を取り出す
If bChinesePrev Then
Select Case iMode
Case 0
LeftString = StrConv(LeftB(bBuffer, iLen), vbUnicode)
Case 1
LeftString = StrConv(LeftB(bBuffer, iLen - 1), vbUnicode)
Case 2
LeftString = StrConv(LeftB(bBuffer, iLen + 1), vbUnicode)
End Select
Else
LeftString = StrConv(LeftB(bBuffer, iLen), vbUnicode)
End If
End Function
' 文字列の先頭から指定した桁数を取り出す
' 引数: sData 処理前文字列
' iLen 取り出す桁数
' iMode 処理モード
' 戻り値:LeftString 処理後文字列
'----------------------------------------------------------------------
Function LeftString(ByVal sData As String, ByVal iLen As Integer, Optional ByVal iMode As Integer = 0) As String
' バイトデータを格納用
Dim bBuffer() As Byte
' 全角文字があるかどうか判定用
Dim bChinesePrev As Boolean
Dim iLoop As Integer
' 文字列をユニコードに転換する
bBuffer = StrConv(sData, vbFromUnicode)
bChinesePrev = False
iLoop = 0
' 全角文字があるかどうかを判定する
If iLen < UBound(bBuffer) + 1 Then
For iLoop = 0 To iLen - 1
If bBuffer(iLoop) >= 160 Then
bChinesePrev = Not bChinesePrev
End If
Next iLoop
End If
' 文字列の先頭から指定した桁数を取り出す
If bChinesePrev Then
Select Case iMode
Case 0
LeftString = StrConv(LeftB(bBuffer, iLen), vbUnicode)
Case 1
LeftString = StrConv(LeftB(bBuffer, iLen - 1), vbUnicode)
Case 2
LeftString = StrConv(LeftB(bBuffer, iLen + 1), vbUnicode)
End Select
Else
LeftString = StrConv(LeftB(bBuffer, iLen), vbUnicode)
End If
End Function