none
Excelアドイン、通貨記号の文字化け RRS feed

  • 質問

  • お世話になります。

    Microsoft Excel Developer's Toolkit Version 5.0のExcel4ファンクションを使用して
    エクセルシート上のデータを取得する、Cで作成したアドインツールを使用しています。Excel2010で、セルの書式設定で表示形式を「通貨」に設定すると「¥40,000」とシート上は表示しています。これをアドインツールで取得すると「?40,000」という文字列で取得されます。

    表示形式のユーザー定義で「¥#,##0"-";[赤]¥-#,###" -"」を選択しても同様、
    「¥#,##0"-";[赤]¥-#,###" -"」を他のエディタを使用してANSIコードで作成しユーザー定義に張付けても
    内部で変換しているようで同様です。

    しかし、若干修正して¥マークの前にスペースを加えるとANSIコードのまま保存されるようです。

      " ¥"#,##0"-";[赤]" ¥"-#,##0" -"

    この場合、アドインツールでも「 ¥40,000」と取得することができました。

    Excel2003、2013では正常に「¥40,000」と取得できます。

    Excel2010はSP1と他の修正も入れて最新の状態です。Excel2007でも同様に文字化けします。

    Excel2010で「¥40,000」と取得する方法は無いでしょうか?
    あるならばご教授ください。
    それとも、Excel4を使ったツールでは不可能なのでしょうか?

    古いプログラムだと理解しているのですが、Excel2013では正常です。また、Excel2010でExcel4ファンクションもサポートされているようです。

    よろしくお願いいたします。

    2014年1月15日 0:20

回答

  • フォーラム オペレーターの星 睦美です。
    jbsho さん、Visual C++ フォーラムに投稿ありがとうございます。

    回答が集まりにくいようですので、私のほうでも何かお役にたてばと思います。質問に返信させていただきますね。
    Excel4 ファンクションに関しては、MSDN ライブラリ(英語)にサポートしていると書かれています。

    Excel4/Excel12 (Office 2013):
    All recent versions of Excel support Excel4. Starting in Excel 2007, Excel12 is supported.

    質問の文字化けに関して、Cで作成したアドインツールの処理の内容は詳しくわかりませんので、Excel 2007 の機能から検討してみました。

    文字化けしている状況は、サポート情報と同様に、「Excel のデータに [通貨表示形式] で設定した円記号 (¥) が Unicode 文字として」処理されているからではないかと思われます。

    (参考情報)
    ・マイクロソフト サポート - Excel で円記号を使用した通貨表示形式のデータを作成し、Word に DDE データ ファイル形式で差し込み印刷すると、通貨形式の円記号 (¥) が疑問符 (?) で表示される:

    Excel 2007 のアドイン (XLL) の開発:
     "Excel 2007 では、ユーザーに対して表示されるすべての文字列は、通常、内部的には Unicode で表記されます。 したがって、Excel 2007 で文字列を交換するには、これを使用するのが最も効率的です。 以前のバージョンでは、バイト文字列は C API を介して操作する場合にのみアクセスすることが可能ですが、ワイド Unicode 文字列は文字列 Variant を介して操作することができます。 これらは VBA から、または Excel 2007 COM インターフェイスを使用して、DLL または XLL に渡すことができます。 Excel 2007 を実行するときは、可能な限り Unicode 文字列で作業をしてください。"

    jbsho さんが「内部で変換しているようで」と書かれているように Excel 2007 では内部ではUnicode で扱っています。
    「¥」マークはエスケープ記号として扱われるため、文字コードが違う場合に文字化けの原因となり対応方法も多く紹介されていますので検索してみてはいかがでしょうか。
    こちらはご参考までに。

    ・Shift_JISのダメ文字:
    https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp

    もしExcel の機能で詳しく質問したい点がありましたら、MSDNのVisual C++ フォーラムではExcel に関してはトピックではないため、先に投稿いただいたMicrosoft コミュニティのOffice フォーラムを活用いただければと思います。

    ※私の推測ですが、Excel2003、2013では正常に処理されるとのこと、二つのバージョンで文字化けしない理由は異なるのではないかと思います。(Excel 2007 以降は内部でUnicode に対応しましたが、参考情報のようにアウトプットした際に文字化けするケースがあり、Excel 2013 ではその点にも対応しているのでは。)

    こちらの情報がお役にたちましたら幸いです。

    ーーー

    返信がないようですので、こちらのスレッドに[回答としてマーク] して回答を終了させていただきますが、もし引き続き質問がありましたら作成されたアドイン ツールのコードを質問内容に書き添えていただけるとVisual C++ の処理に関してコミュニティのユーザーからアドバイスを得られると思います。

    今後ともMSDN フォーラムをよろしくお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 回答の候補に設定 星 睦美 2014年1月20日 2:28
    • 回答としてマーク 星 睦美 2014年1月24日 5:56
    • 編集済み 星 睦美 2014年1月24日 5:56 クローズのお知らせ
    2014年1月17日 2:53

すべての返信

  • フォーラム オペレーターの星 睦美です。
    jbsho さん、Visual C++ フォーラムに投稿ありがとうございます。

    回答が集まりにくいようですので、私のほうでも何かお役にたてばと思います。質問に返信させていただきますね。
    Excel4 ファンクションに関しては、MSDN ライブラリ(英語)にサポートしていると書かれています。

    Excel4/Excel12 (Office 2013):
    All recent versions of Excel support Excel4. Starting in Excel 2007, Excel12 is supported.

    質問の文字化けに関して、Cで作成したアドインツールの処理の内容は詳しくわかりませんので、Excel 2007 の機能から検討してみました。

    文字化けしている状況は、サポート情報と同様に、「Excel のデータに [通貨表示形式] で設定した円記号 (¥) が Unicode 文字として」処理されているからではないかと思われます。

    (参考情報)
    ・マイクロソフト サポート - Excel で円記号を使用した通貨表示形式のデータを作成し、Word に DDE データ ファイル形式で差し込み印刷すると、通貨形式の円記号 (¥) が疑問符 (?) で表示される:

    Excel 2007 のアドイン (XLL) の開発:
     "Excel 2007 では、ユーザーに対して表示されるすべての文字列は、通常、内部的には Unicode で表記されます。 したがって、Excel 2007 で文字列を交換するには、これを使用するのが最も効率的です。 以前のバージョンでは、バイト文字列は C API を介して操作する場合にのみアクセスすることが可能ですが、ワイド Unicode 文字列は文字列 Variant を介して操作することができます。 これらは VBA から、または Excel 2007 COM インターフェイスを使用して、DLL または XLL に渡すことができます。 Excel 2007 を実行するときは、可能な限り Unicode 文字列で作業をしてください。"

    jbsho さんが「内部で変換しているようで」と書かれているように Excel 2007 では内部ではUnicode で扱っています。
    「¥」マークはエスケープ記号として扱われるため、文字コードが違う場合に文字化けの原因となり対応方法も多く紹介されていますので検索してみてはいかがでしょうか。
    こちらはご参考までに。

    ・Shift_JISのダメ文字:
    https://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp

    もしExcel の機能で詳しく質問したい点がありましたら、MSDNのVisual C++ フォーラムではExcel に関してはトピックではないため、先に投稿いただいたMicrosoft コミュニティのOffice フォーラムを活用いただければと思います。

    ※私の推測ですが、Excel2003、2013では正常に処理されるとのこと、二つのバージョンで文字化けしない理由は異なるのではないかと思います。(Excel 2007 以降は内部でUnicode に対応しましたが、参考情報のようにアウトプットした際に文字化けするケースがあり、Excel 2013 ではその点にも対応しているのでは。)

    こちらの情報がお役にたちましたら幸いです。

    ーーー

    返信がないようですので、こちらのスレッドに[回答としてマーク] して回答を終了させていただきますが、もし引き続き質問がありましたら作成されたアドイン ツールのコードを質問内容に書き添えていただけるとVisual C++ の処理に関してコミュニティのユーザーからアドバイスを得られると思います。

    今後ともMSDN フォーラムをよろしくお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    • 回答の候補に設定 星 睦美 2014年1月20日 2:28
    • 回答としてマーク 星 睦美 2014年1月24日 5:56
    • 編集済み 星 睦美 2014年1月24日 5:56 クローズのお知らせ
    2014年1月17日 2:53
  • 返信が遅くなって申し訳ありません。

    アラートを設定していたのですが、メールがきていないのであきらめていました。

    古いプログラムなので、修正できない状態です。エクセルの設定で回避方法があればと思っていましたが・・・

    別の方法で回避いたしました。

    ありがとうございました。

    2014年1月27日 4:49