トップ回答者
Excelアドイン、通貨記号の文字化け

質問
-
お世話になります。
Microsoft Excel Developer's Toolkit Version 5.0のExcel4ファンクションを使用して
エクセルシート上のデータを取得する、Cで作成したアドインツールを使用しています。Excel2010で、セルの書式設定で表示形式を「通貨」に設定すると「¥40,000」とシート上は表示しています。これをアドインツールで取得すると「?40,000」という文字列で取得されます。表示形式のユーザー定義で「¥#,##0"-";[赤]¥-#,###" -"」を選択しても同様、
しかし、若干修正して¥マークの前にスペースを加えるとANSIコードのまま保存されるようです。
「¥#,##0"-";[赤]¥-#,###" -"」を他のエディタを使用してANSIコードで作成しユーザー定義に張付けても
内部で変換しているようで同様です。" ¥"#,##0"-";[赤]" ¥"-#,##0" -"
この場合、アドインツールでも「 ¥40,000」と取得することができました。
Excel2003、2013では正常に「¥40,000」と取得できます。
Excel2010はSP1と他の修正も入れて最新の状態です。Excel2007でも同様に文字化けします。
Excel2010で「¥40,000」と取得する方法は無いでしょうか?
あるならばご教授ください。
それとも、Excel4を使ったツールでは不可能なのでしょうか?
古いプログラムだと理解しているのですが、Excel2013では正常です。また、Excel2010でExcel4ファンクションもサポートされているようです。
よろしくお願いいたします。
回答
-
フォーラム オペレーターの星 睦美です。
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 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
すべての返信
-
フォーラム オペレーターの星 睦美です。
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 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