|
文字列を 10バイトで カンマを挿入するサンプルです。
なお、VBAのMidB関数を VBAの文字列に対して 直接適用してはいけません。
VBA上では 文字コードはUnicodeで(abc123あいう亜 すべて2バイト)
↓最後の参考例のように、目的の文字列は取り出せません。
'Try2 実行結果
あいう111 , おかきくけこ
あいう1え , おかきくけこ
1234567890,abcdefghij
12345 67890
Sub Try2()
Const u1 = "1234567890abcdefghij"
Const u2 = "あいう111おかきくけこ"
Const u3 = "あいう1えおかきくけこ"
Debug.Print USplit(u2, 10) '10バイトまでと それ以降に分割
Debug.Print USplit(u3, 10)
Debug.Print USplit(u1, 10)
'参考
Debug.Print MidB(u1, 1, 10), MidB(u1, 11, 10)
End Sub
Function USplit(UStr As String, ByVal m As Long) As String
Dim bb() As Byte
ReDim bb(1 To m * 2)
bb = StrConv(UStr, vbFromUnicode) 'ShiftJISバイトコードに直す
'指定のmバイト目が コード80〜9F、または E0〜FF だったら、
Select Case bb(m + 1)
Case &H80 To &H9F, &HE0 To &HFF '分割点が全角文字の中にあったら
m = m - 1 '------ 分割点を1バイト前に移動
'または m = m + 1 '------ 分割点を1バイト後ろに移動
End Select
USplit = StrConv(LeftB(bb, m), vbUnicode) & "," _
& StrConv(MidB(bb, m + 1), vbUnicode)
End Function
|
|