• ベストアンサー

数値データを書式毎に表示結果を加工する処理方法について

開発環境は、VisualC++6(SP3)です。 【数値データ】を書式毎に表示結果を加工する処理について、 独自処理PGを作成しました。 (Excelセル書式の表示書式-ユーザ定義で「#,###」等の様に、  指定された書式へ変換する事) が、不具合が多く困っております。 (独自PGということもありパターンによってはExcel通りに動かない) これを、独自処理などではなく、例えば、 MFCのクラスとかAPIなどその他を使って、 正確にExcelの表示書式に近い加工処理を行うPGの方法について あるいはヒントなどございましたら、ご教示くださいませ。 (変換例(1))  書式  :#,###.#  実データ: 1987.65     ↓  加工後 :1,987.7  (Excelと同じ動き) (変換例(2))  書式  :#,##0.00  実データ:-20000     ↓  加工後 :-20,000.00 (Excelと同じ動き)

noname#2802
noname#2802

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

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

qwertyさんの解説にあるように、VBのFormat関数の機能が使えそうですね。 そうすると、(開発中のMFCのプロジェクトにもよるのですけど) VBで作成したActiveXDLLをVC側から利用することができるので、 VBのFormat関数の機能をエクスポートするDLLを作ってしまいましょう。 ただし私は、「時間がない自信がない」などのときに、 最後の手段としてこの手段を使います。 何故かっていうと、とてもアクが強いというか..使いづらいのです。 まあ経験なんでしょうけどね。 ・ActiveXの仕様を熟知して、さらに、こちらのプロジェクトをあわせなければいけない。 ・一度VCにタイプライブラリとしてインポートしてしまうと、VB側で発生した変更点をVCに反映する際に面倒くさい。 (これは、ClassWizardがオートでいろいろやってくれますので、変更反映の際は、 依存関係をすべて切り離さないといけません。) ・配布のときのライブラリ依存が複雑になるかも。(VBランタイムだけかな..?) などなど..つまり、処理を外出しする分、外覧が増えることが最大の欠点ですね。 長所としては、VB標準のランタイムを使うので、 処理的なバグに悩むことは、ほぼなくなります。 Excel準拠で確実さ・安定性を求めるなら、お勧めします。 まあ自分で処理を書かずに楽するわけですから、我慢すれば使えます。 参考URLで使い方からサンプルまで、懇切丁寧に書いてありますよ。 参考になれば幸いです。

参考URL:
http://www.geocities.co.jp/SiliconValley-SanJose/5309/index.html
noname#2802
質問者

お礼

分かりやすいご回答、ありがとうございました♪ VBのDLLで対応する案、とても参考になりました。 今後のプロジェクトにて、検討しようと思います。 (今回は、諸事情があって、現状のままの仕様となりました。ToT;)

その他の回答 (2)

  • qwerty
  • ベストアンサー率43% (20/46)
回答No.2

こんにちは。 できそうな気がしますなんて、無責任なコメントでした。 平謝りでございます。 CStringのFormat()メンバ関数はprintf()ですもんね・・・。 桁区切りのカンマは入れられないですね。 すっかりVBのFormat関数と混同しておりました。 数年前にVC5.0で作ったと思っていたものは、 実はVB5.0で作成していたようです。 大反省です。 申し訳ありませんでした(汗) ただ、専門家の方ならぼくの思いつかない方法をご存知かもしれませんので、 その方々にご登場頂けることをご一緒にお祈り申し上げます。

  • qwerty
  • ベストアンサー率43% (20/46)
回答No.1

おはようございます。 おやりになりたいことは、 CStringクラスのFormatメンバ関数で出来そうな気がしますが・・・。

noname#2802
質問者

補足

以下のように処理をしてみましたが、 結果は「#,###.#」になってしまいました。 <処理内容>  CString str = "1987.65";  str.Format("#,###.#", str); 結果が「1,987.7」にするためには、 どのようにすればよいでしょうか?

関連するQ&A

  • 緯度経度数値データをそのままシリアル値に変換したい

    悩んでいます。どなたか教えてください。 住所から緯度経度を検索してエクセルに入力しました。 このデータを基に基準点からの距離を測定したいのですが、 エクセルの書式設定でシリアル値"[h]:mm:ss.000"を設定して 手入力すると正常に入力できるのですが、すでに入力されている 緯度・経度の書式を変換すると正常に表示されません。 例) 緯度 "35.6587039"と入力されているセルの書式を”[h]:mm:ss.000"に変換すると 855:48:32.017と表示され、データは1900/2/4 15:48:32になります。 これをシリアル値に変換して35:65:87.039としたいのですがどのような計算をしたら いいのでしょうか? よろしくお願いします。

  • エクセルの数値データについて

    OSはウィンドウズビスタで最新版です。 エクセルに数値データを入力するとき漢字変換で入力すると、文字データとして左揃えで入力されました。 一度そのような入力をしてしまうと、同じセルに漢字変換でなく「直接入力」に直しても数値として入力できません。 「書式」「セルの書式設定」「表示形式」で数値を選択してもダメです。 すでに沢山のデータを入力し、いざ計算をと思いましたが、最初から入力し直さなければダメでしょうか? どなたかわかる方宜しくお願いします。

  • delphiでの文字表示書式

    delphiにて、以下のような書式設定はできるのでしょうか? ゼロサプレス+カンマ表示+桁数固定での表示をさせたいと思っております。 例)数値データ → 変換後(6桁固定)   「1000」    「 1,000」 簡単な方法はありますでしょうか?

  • MS Access 数値の表示について

    はじめまして。 これからアクセスを入門しようとしている者です。 (超初心者です) 例えば、Excel(1) ⇒Accessのデータベースへインポート ⇒Excel(2)へアウトプット の過程を想定した場合、 Excel(1)で「1.30」と表示されているデータを、Excel(2)でも「1.30」と表示させる方法はありますでしょうか? ※小数第2位まで表示する書式を、インポート・アウトプットを経てもその書式を認識し、維持する。 やはりインポート・アウトプットを経過すると、Excel(2)での桁合せの処理を行わない限り、数値のみの情報「1.3」でしか表示されないでしょうか・・・。 いい方法をご存知の方いらっしゃったら、ぜひご教示お願いします。

  • CSVデータの数値の表示

    教えて下さい。 他プログラムからCSVデータ出力したデータを エクセルで表示すると、13桁の数字が9E+12と表示されて しまいます。 セルの書式設定を「数値」に変更すると一時的に数字が表示されるのですが、一度保存して、再度ファイルを開くと戻ってしまいます。 エクセル形式で保存すれば大丈夫なのですが、どうしてもCSVファイルのままで保存したいのです。 CSVデータで13桁の数字を常に表示する方法を教えて下さい。 よろしくお願いします。

  • excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょう

    excelデータの加工をマクロ等で処理する方法を教えて頂けないでしょうか。 複数のエクセルデータのファイルがあります。 回数・距離・深さのデータが入っています。(回数は1回~10回位まであります) そのデータを加工するのですが、マクロ等で迅速に処理できる方法がないものでしょうか? マクロは実行する程度で作成した事はありません。。 加工作業は、 (1)「距離」と「深さ」の間に『間隔』という項目行を増やす。 (2)『間隔』の計算をする。(距離2回-1回・3回-2回・・のように計算します)間隔行の最終の回には“-”とおく。 (3)「回数」行の右端に『最小値』・『最大値』・『平均値』という項目列を増やす。 (4)『間隔』「深さ」の最小値・最大値・平均値を求める。(「距離」は求めないので“-”をおきます。 (5)「距離」と『間隔』行は小数点以下3桁にする。 (6)「深さ」行は小数点以下1桁にする。 (7) 罫線を引く という流れなのですが、何かいい方法がありましたら教えて頂けないでしょうか? 宜しくお願い致します。

  • 数値データの一括変換方法について

    「EXCEL」または「ACCESS」でのデータ変換について質問です。 下記のような「0」と「1」からなる10桁の数値があり、 それを特定のルールに従い一括変換する方法があれば教えて下さい。 例(1))0000000000 →0 例(2))1111111111 →1|2|3|4|5|6|7|8|9|10 例(3))1010110000 →1|3|5|6 例(4))0000110010 →5|6|9 例(5))0000000001 →10 10桁の数値の左側から順に「1」になっていれば、その桁の数値に置き換える。(1桁目は「1」、3桁目は「3」、10桁目は「10」) また置き換えた数値が2個以上ある場合は、「|」の記号で区切る。 上記のような数値データが数万個あり、それらを一括で変換できる方法があれば教えて頂けると助かります。 お忙しい所 大変恐縮ではございますが、何卒宜しくお願い致します。    

  • 数値から日付書式へ

    初めて投稿します。 javaの初心者です。 現在、jspファイル内で、数値型の値を時間書式に変換して、リンクボタンに出力しようと思っています。 例: jspファイル内で    int time = 630; とあるものを、 実行時には   06:30 と表示したいと思っています。 どういう方法があるのか教えていただきたいと思います。 よろしくお願いします。

    • ベストアンサー
    • Java
  • エクセルの一覧データを別の書式であらわしたい

    こんにちは。 エクセルでのデータ処理の質問です。 例えば、一枚目のシートで横一列に必要なデータを入力して、一覧にし、基礎データを作るとします。 これを2枚目のシートで、横一列のデータを別の書式にして作成したいと思います。 一枚目のシートの基礎データが、増えていくとすると、 増えたデータを、自動的にシート2の書式に作っていく方法はありますか? 今のところ、ワードの差込印刷しか思いつかないんですが、できれば、エクセルで自動に書式2がつくられるようにしたいのでが…。 分かりにくい質問ですみません。 よろしくお願いします。

  • Excelで1:70と入力した結果表示される数値の元になる計算

    Excelの書式が標準のセルに例えば、 1:70と入力すると、0.0902777777777778 と表示されますが これはどういう計算式でそうように換算されるのでしょうか? 元は1時間70分という意味の入力で、 セルの書式を変えて2:10に変換する方法はわかりますが 0.0902777777777778 と表示される理由が知りたいと思います。 時間に関係した計算と思いますが、できればなるべく単純な計算方法があれば教えていただけると幸いです。

専門家に質問してみよう