• ベストアンサー

VBAでJIS補助漢字を扱う方法

Web上からリストを取得し、それを整形して、最終的にはメールを自動で送信するプログラムを作成しています。 既に完成して問題なく動作しているのですが、人名に一部の文字が使われているとその文字だけが"?"に置き換えられてしまうということに先日気付きました。原因は「JIS補助漢字」のせいだと分かったのですが、対応方法が分かりません。 「JIS補助漢字」 http://www.asahi-net.or.jp/~AX2S-KMTN/ref/jisx0212/index.html 例えば単純にA1のセルに「JIS補助漢字」を入れて、それをセル毎コピーするだけなら問題ありませんが、一旦変数に取り込むとその時点で"?"に置き換わってしまいます。 どんな方法からでもかまいませんのでヒントがあればご存知の方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

解決策ではなく、ヒントです。 VBAが対応していないわけでなく、 VBAの一部の機能が対応していません。 具体的には、ファイルの出力 や イミデぃエイトウィンドウへの 出力など。 文字列変数自体は、JIS補助漢字にも対応しているはずです。 Unicode対応したAPIを使うと、JIS補助漢字に対応できます。 セルA1に入れた文字をVBAで認識できるかの実験サンプルです。 Private Declare Function MessageBoxW Lib "user32.dll" _ (ByVal hWnd As Long, ByVal lpText As Long, ByVal lpCaption As Long, ByVal uType As Long) As Long Sub Main() Dim a As String Dim b As String a = Cells(1, 1) b = a Debug.Print b '<= VBA の IDE は Unicodeに対応できてない Debug.Print AscW(b) '<= でも、内部的にはUnicodeは維持されている Cells(2, 2) = b '<= Cellは Unicodeに対応できてる MsgBox b '<=標準のMsgBoxはUnicodeに対応しない MessageBoxW 0, StrPtr(b), StrPtr("実験"), 0 '<=Unicodeに対応したMsgBox End Sub

popesyu
質問者

お礼

サンプルコードのご提示ありがとうございます。 APIを使う工夫とCell上で直接操作するという部分を組み合わせたら何とかなりそうです。 サンプルを参考に作ったテストでも意図どおりの動作をしました。 ありがとうございました。

その他の回答 (1)

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.1

結論からいうと VBAでのJIS補助漢字の対応はしていないようです。 詳細は以下を参照 ____________________________________________________________ 【参考】 以下は勝手ながら参考とさせていただきました。 ◆1バイト2バイト混在文字列から固定文字数を抽出 http://makotowatana.ld.infoseek.co.jp/vba.html#bite ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>Excelのワークシート関数は、UNICODE でも、B付きの関数で、全角半角を識別して結果を表示します。 >>ところが、VBA の文字列関数は UNICODE→Shift_JIS に自動で対応してくれないのです。 の部分をみてもらえればわかるように STRCONV でうまく変換しないと"?" になってしまいます。 私も今回しらべて勉強となりました。 特に日本語については Vista になってからまた扱いが違うとのこと。 いろいろとありそうです。 以上

popesyu
質問者

お礼

やはり標準の関数等を組み合わせたりする方法では不可ということですね。薄々そうではないかと思っていましたが、参考になりました。ありがとうございます。2番さんのAPIを使った方式を試してみたいと思います。

関連するQ&A