VBAで環境依存文字(Unicode)が文字化けした時の対応(ChrW)
VBAにエクセルやテキストエディタからコピーした文字を貼り付けたら、一部の文字だけ「?」に置き換わって文字化けしてしまったことがありました。
すべての文字が解読不能なものに置き換わったらすぐに気がつきますが、一部だけだったので、その時は気づかず、他の人に指摘されて初めて文字化けしていることを知りました。
「?」に置き換わってしまった文字
今回「?」に置き換わってしまった文字は「ℓ」(リットル)です。
単位記号としてよく使われるので、ℓ(リットル)を使おうとして文字化けした人は多そうな気がします。
ちなみにフォームのラベルやテーブルに直接文字を書き込んだ場合は文字化けしません。VBAのコードで使おうとすると文字化けします。
調べると、これを回避するためには、「ChrW」という関数を使ってUnicodeの文字コードを直接指定するようです。
「ℓ」の文字コードが「2113」なので、これを指定する場合、ChrW(&H2113)と記述します。
Dim str As String
str = weight & "kg/" & ChrW(&H2113)
[txtテキスト短文] = str
実行すると、フォーム上のテキストボックスに正常に「ℓ」が表示されました。
ちなみに「Debug.Print」でイミディエイトウィンドウに出力すると、やっぱり文字化けしてしまいます。