String型の中身は自動的にS-JISに変換される件

Windows上で、SJIS 以外の文字列を扱うことが普通になっていますが、VBAで文字化けさせずに処理を行うのはちょっとコツがいります。
VBAの内部構造で、String型はUNICODEで保持されますが、APIやファイルに書き出すと自動的にS-JIS(正確にはCP932)に変換されてしまいます。
Stringの中身が外に出ていくときにはイメージ的にはStrConv(xxx, vbUnicode)が自動的にかかる感じ。
これを回避するためには書き方を変える必要があります。

APIの場合

  1. API の場合 W 付きのものを使用する。(又はマニュアルでUnicodを扱う方法が記述されていればその方法)
  2. API の引数は ByVal のLongPtr 型にする。
  3. 文字列にStrPtrをかけてアドレスを渡す。

ファイル出力の場合

  1. バイナリーモードでオープンする。
  2. String 型の文字列を Byte 型の可変型変数に代入
  3. Put で出力する。

可変長のByte型はString 型の文字が入るというのがミソではある。

ABOUTこの記事をかいた人

はてなブックマークで驚愕の1600越えを記録した伝説が今明らかに! エクセル方眼紙 四天王の1人(ほぼ最弱)窓の杜大賞2014 大賞受賞! Excelを便利にする250以上の機能を体系化したアドインはこちらです。