Sub TEST1()
'全角の文字列を左から4バイト切り出す
MsgBox LeftB("あいうえお", 4)
End Sub
実行した結果です。
LeftBで全角を4バイト切り出し
2文字が切り出されます。
次に半角文字列『12345』を同じように『LeftB』で『4バイト』切り出してみます。
Sub TEST2()
'半角の文字列を左から4バイト切り出す
MsgBox LeftB("12345", 4)
End Sub
実行した結果です。
LeftBで半角を4バイト切り出し
半角でも同じで2文字切り出されました。
ほしいのは『1234』なんですよね。
解決策
解決策です。
『LeftB』と『StrConv』を組み合わせます。
Sub TEST3()
Dim A, B
'文字コードをShift-JISへ変換'これで全角を2バイト、半角を1バイトとして認識できます
A = StrConv("12345", vbFromUnicode)
'左から4バイト切り出す
B = LeftB(A, 4) '←ここまでは文字化けしてVBAで認識できません'文字コードを元に戻す
MsgBox StrConv(B, vbUnicode) '←ここでVBAで認識できるようになります
End Sub
Sub TEST4()
Dim A, B
'文字コードをShift-JISへ変換
A = StrConv("あいうえお", vbFromUnicode)
'左から4バイト切り出す
B = LeftB(A, 4)
'文字コードを戻す
MsgBox StrConv(B, vbUnicode)
MsgBox c
End Sub
実行結果です。
全角を4バイト左から切り出し
『あい』となり、全角を2文字だけ切り出せました。
全角を2バイトとして2バイト×2=4バイト切り出せています。
ちゃんと全角は2バイトとして認識されてますね。
全角をShift-JISへ変換したイメージです。
Shift-JISへ変換
全角では元々2バイトで認識できますのでバイト数に変化はないです。
これから4バイト切り出すとこのような形です。
4バイト切り出し
もちろんこのままでは文字化けしているので最後に『Unicode』へ戻してあげます。
Unicodeへ戻す
これで全角を2バイトとして4バイトが切り出せるということになります。
全角と半角を混ぜてみる
全角と半角を混ぜた文字列で試してみます。
Sub TEST5()
Dim A, B
'文字コードをShift-JISへ変換
A = StrConv("あ123い", vbFromUnicode)
'左から4バイト切り出す
B = LeftB(A, 4)
'文字コードを元に戻す
MsgBox StrConv(B, vbUnicode)
End Sub
Sub TEST6()
Dim A, B
'文字コードをShift-JISへ変換
A = StrConv("あいう123", vbFromUnicode)
'右から5バイト切り出す
B = RightB(A, 5)
'文字コードを元に戻す
MsgBox StrConv(B, vbUnicode)
End Sub
Sub TEST7()
Dim A, B
'文字コードをShift-JISへ変換
A = StrConv("あいう123", vbFromUnicode)
'3バイト目から、5バイト切り出す
B = MidB(A, 3, 5)
'文字コードを元に戻す
MsgBox StrConv(B, vbUnicode)
End Sub