|
へなちょこ さん、こんばんわ。
>まだ理解していませんが、助かりました。
>ありがとうございます。
>
>>Excel97以上のバージョンであれば、
>>「Excel97からはUnicode対応のアプリケーションとなり、半角の文字であっても2バイト
>>文字として扱われる」からだと思います。
本家サポート情報に詳細が書いてあります。使用例もあります。
http://support.microsoft.com/default.aspx?scid=kb;ja;408879
>Unicodeは半角が2バイト・全角が4バイトで、
>他の文字コードは半角が1バイト・全角が2バイトなのでずれてしまったということ
>ですか?
Unicodeは全角、半角ともに2バイトです。
なので、
あaA
は、unicodeでは6バイト、ANSIでは5バイトになります。
Sub test1()
A$ = "あaA"
MsgBox LenB(A$), vbInformation, "Unicode"
MsgBox LenB(StrConv(A$, vbFromUnicode)), vbInformation, "FromUnicode"
End Sub
>>MidB("文字列", 開始位置, バイト数)
>>は、
>>StrConv(MidB(StrConv("文字列", vbFromUnicode), 開始位置, バイト数), vbUnicode)
>>というようにします。
>なぜ2回変換を行うのですか?
StrConv("文字列", vbFromUnicode) でUnicodeからANSIに変換して、MidBでカットします。
次に、その戻り値をUnicodeに戻します。
StrConv( カット後のANSI文字列 , vbUnicode)
↓戻さないと。
Sub test2()
A$ = "あaA"
B$ = MidB(StrConv(A$, vbFromUnicode), 1, 2)
MsgBox B$, vbInformation, "戻さない"
MsgBox StrConv(B$, vbUnicode), vbInformation, "戻すと"
End Sub
|
|