none
【類似ケースを教えてください】Excel上では整数として表示されているデータが、VBで作成のプログラムに読み込むと小数として認識されてしまい正常に表示されない。 RRS feed

  • 質問

  • お世話になります。
    某企業のIT部門のものです。

    以下、ご存知のことがございましたらどなたかお教え願えませんでしょうか。


    ◆環境:Excel 2003 および 2010/ VBで作成したプログラム

    ◆エラー内容:Excel(2003/2010)のセル上では整数として表示されているデータが、
    VBで作成したプログラムに読み込むと小数として認識されてしまい正常に表示されない。

    ◆詳細:
    業務上、他社がxlsx形式のファイル(Aとする)のセル上のデータの一部を別のxlsxファイル(Bとする)に貼り付け、
    そのファイルをxls形式にダウングレードしたもの(Cとする)を当社に送付してもらう形をとっております。
    私どもはそのCファイルのデータを、VBで作成したプログラムに読み込んで使用しております。
    ここで、Excelファイル上では整数として表示されている数値が、
    VBのプログラム上で小数と認識されてしまい、正常に表示されないのです。
    正しくは「215,800」(21万5800)というデータが、「0」と表示されてしまいます。

    ・Excelファイル上のセルのプロパティは「数値」ではなく「ユーザー定義」になっております。
    全てのセルがこの設定ですが、一部のセルのみエラー取り込みされます。

    ・VBのプログラム内では、「Fix関数」を使用しております。
    Excelのデータは金額データで整数なので、小数点以下を切り落としても値は変わらないはず、
    という判断のためにこの関数を使用しております。
    今回この関数で小数点以下を切り落とす前には「215,7999.99990」というふうにプログラム内では認識されているようでした。

    ◆考えられる原因:xlsxファイルをxls形式にダウングレードしたためではないかと思われます。
    他社の作業を踏まず私どものほうで、XP端末(Office2003環境)を用いてA(xlsファイル)をB(xlsファイル)にしたものを、
    そのままプログラムに取り込みますと、正常に読み込まれたためです。

    ◆このようなエラーに類似したケースをご存知でしたら、教えていただけませんでしょうか。
    詳しい原因などもご存知でしたら併せてお願い致します。

    よろしくお願い申し上げます。




    • 編集済み Rubiaceae 2011年8月11日 0:55
    2011年8月9日 7:14

回答

  • VB6ってことなので私にはわからないです。ごめんなさい。

    > 恐れ入りますが、浮動小数点の型で認識されないためにはどのようにすればよろしいか、
    > もしご存知であればお教え願えませんでしょうか。
    > PGM内ではなく、Excelファイル上でそう認識されないようにする設定などはございますか?

    もしかしてPGM内で何やっているかはわからないけど
    Excel側でなんとかしたいという話なのでしょうか。
    であれば、私にはわかりません。
    また、セルの書式がユーザ定義とのことですが、まだそれも明らかになっていません。

    とりあえず推測だけで解決策を探るのは難しそうなので
    ・どうやって取り込んでいるか(できれば該当部分のコード)
    ・元になっているExcel(を作る方法)
    などがないと検証も推測もできない(少なくとも私には)と思います。

    • 回答の候補に設定 山本春海 2011年8月26日 5:16
    • 回答としてマーク 山本春海 2011年9月2日 4:25
    2011年8月11日 5:53

すべての返信

  • たぶん、VBは関係ありませんし、エラーでもありません。

    Excelの特にセルの表示形式にどのような機能があるのかご存じないだけかと。「ユーザー定義」から「数値」に変更すれば、セル内部で保持されている本当の値が表示されることでしょう。それはVBで取得できる値と一致するはずです。
    というわけで、Excelの使い方をもっと勉強することをお勧めします。 

    2011年8月9日 8:36
  • まず、VB.NETですか、VB6ですか。
    あと、Excelファイルを取り込む方法がいくつかあるかと思うのですが
    どのような形でとりこんでいるのでしょうか。
    それによってできるアドバイスは変わってくると思われます。

    おっしゃっている状況から見ると3桁区切りのカンマが小数点として認識されて
    かつ浮動小数点の型で認識されているのかな、と思えます。
    推測なので外していたらすいません。

    2011年8月9日 8:36
  • 佐祐理様、ご回答ありがとうございます。
    返信が遅くなり申し訳ございません。

    本文に記載するのを忘れておりましたが、セルの書式設定を「数値」にしてみましても、
    値が整数であることが確認できておりました。
    その値をVBに取り込むと小数になるので、どうしたものかと思っております。

    説明不足で大変失礼致しました。


    2011年8月11日 0:42
  • mars12様、ご回答ありがとうございます。
    返信が遅くなり申し訳ございません。

    VBは6です。
    Excelの取り込み方法については、すみません、ただいま確認中です。

    本文の記載が間違っていたのですが、(訂正済みです)
    データの中のドットは、カンマでした。

    入力した数値は「215,800」、
    取り込んだ後のデータはPGM上では、「215,799.99990」となっておりました。

    カンマが小数点と認識されてしまうことはよくあることなのでしょうか。
    同じExcelファイル内の他の値もカンマを用いているのに、エラー取り込みされないのが不思議です。

    恐れ入りますが、浮動小数点の型で認識されないためにはどのようにすればよろしいか、
    もしご存知であればお教え願えませんでしょうか。
    PGM内ではなく、Excelファイル上でそう認識されないようにする設定などはございますか?



    2011年8月11日 0:54
  • 「数値」に変更したら「0」ではなくなるんですよね? その時点で、質問本文にある「「0」と表示されてしまいます」とは異なるわけですが。

    「数値」の横には小数点以下何桁まで表示するかの設定があります。そこがデフォルトでは「0」なので整数として表示されているだけではありませんか?

    ここは開発フォーラムなので、単純なExcelの操作方法を説明したくはありません…。

    2011年8月11日 0:57
  • VB6ってことなので私にはわからないです。ごめんなさい。

    > 恐れ入りますが、浮動小数点の型で認識されないためにはどのようにすればよろしいか、
    > もしご存知であればお教え願えませんでしょうか。
    > PGM内ではなく、Excelファイル上でそう認識されないようにする設定などはございますか?

    もしかしてPGM内で何やっているかはわからないけど
    Excel側でなんとかしたいという話なのでしょうか。
    であれば、私にはわかりません。
    また、セルの書式がユーザ定義とのことですが、まだそれも明らかになっていません。

    とりあえず推測だけで解決策を探るのは難しそうなので
    ・どうやって取り込んでいるか(できれば該当部分のコード)
    ・元になっているExcel(を作る方法)
    などがないと検証も推測もできない(少なくとも私には)と思います。

    • 回答の候補に設定 山本春海 2011年8月26日 5:16
    • 回答としてマーク 山本春海 2011年9月2日 4:25
    2011年8月11日 5:53
  • エクセルのセルに「20.88」とか入力します。そしてセルの幅を狭くすると・・・整数として表示されます。

    表所と内容が一致しているか、よく確認しましょう。


    Jitta@わんくま同盟
    2011年8月17日 13:49
  • 佐祐理様、ご返信をありがとうございました。
    返信が大変遅くなり誠に申し訳ございません。

    Excelのシート上のセルの書式を、「数値」にしても、「標準」にしても、「ユーザ定義」にしても、
    どの場合でもそのデータをプログラムに取り込んだ結果の値の表示が「0」になってしまう、という意味です。
    VB内のソースを読み解くと、値は小数として「認識」されていますが、プログラムには「0」と
    「表示されてしまう」のです。
    表示されるべき値は、0でも小数の値でもなく、必ず0以外の整数値になるはずなのです。

    この件は、かなり特殊なケースかと思われます。
    プログラムというのが、私どもの会社が独自に開発したものですし、
    ソースを掲載することもできないので、説明が難しい部分がございます。
    説明が不十分でご迷惑おかけしております。

    とりあえず、この件の類似ケースをお教えいただけるだけで大変助かります。

    もしもございましたらよろしくお願い致します。

    2011年8月19日 4:41
  • mars12様、ご回答をありがとうございます。
    返信が大変遅くなり、申し訳ございません。

    >もしかしてPGM内で何やっているかはわからないけど
    >Excel側でなんとかしたいという話なのでしょうか。

    Excel側でもPGM側でもどちらでも構いません。もし解決できるのであれば方法は問いません。

    どちらにせよ、こちらの説明不足は否めず、ご迷惑をおかけしまして申し訳ありません。

    Excelファイルの取り込み方法は、コードは掲載できませんが、
    「Excelを開いて、セル位置を指定して取り込む」だけの簡単なものです。

    元になっているExcelファイルの作成方法は、本文の通りなのですが、もう少し詳細を申し上げますと、
    ファイルAのセル上にある、簡単な乗法の計算式(A1*1000とかその程度です)の結果部分を、ファイルBに手動で貼り付けて、
    それをxls形式で保存しなおして、PGMに取り込むファイルCを作成しております。


    2011年8月19日 5:59
  • Jitta様、ご返信をありがとうございます。
    返信が遅くなり申し訳ございません。

    お答えを取り違えていましたら申し訳ないのですが、
    問題は少なくとも目に見える形では、VBで作成のPGMにしか現れていないのです。
    エクセルのセルに問題はないように思われます。
    セルの幅も関係がないようでした。

    2011年8月19日 6:03
  • 「類似ケース」かどうかは微妙ですが,ExcelのデータをWordに差し込み印刷する際に類似の現象が起こります。

    http://office.microsoft.com/ja-jp/word-help/HA001116495.aspx

    表示形式を文字列にしておき,VB側で数値に変換したらよいのではないでしょうか。

    2011年8月19日 13:42
  •  セルの幅を縮める云々は、最初の投稿に「金額データで整数なので」と書いてあることに起因します。日本で通常使われる金額は円単位で整数の場合が多いですが、為替などでは銭単位の小数が使われます。金額を案分すると端数が出てきますが、これを上手く処理していないと小数となります。従って、金額データだから整数とは限りません。表示上整数に見えているが、実際の値は小数ということはないか、確認をしていただきたいと思いました。

     で、わからないのが、「VBのプログラム上で小数と認識されてしまい、正常に表示されないのです。」の部分と、「今回この関数で小数点以下を切り落とす前には「215,7999.99990」というふうにプログラム内では認識されているようでした。」の関係です。VB6 にも、Excel VBA にも Fix という関数がありますが、どちらで実行しているのでしょう?また、2011年8月11日 0:42の「その値をVBに取り込むと小数になるので、どうしたものかと思っております。」ですが、VB6 に取り込んで小数になっているのを確認したのですよね?なぜ、小数として認識してしまうと、正常に表示できないのでしょう?表示部に整数を渡さなければならないのなら、 CInt で整数に変換すればいいのではないでしょうか?そもそも、VB6 のデフォルトである Option Strict Off の状態では、小数から整数への変換は自動でしてくれたと思います。Option Strict On の状態であれば、CInt 等で変換していなければ、エラーが出るでしょう。

     ということで、小数と認識されることと、正常に表示されないことの間に、どの様な関係があるのか、わかりません。小数として認識されること以外の要因で正常に表示されないのではないでしょうか。


    Jitta@わんくま同盟
    2011年8月20日 4:09
  • こんにちは、Rubiaceae さん。

    MSDN
    フォーラムのご利用ありがとうございます。オペレーターの山本です。

    みなさんから参考になるアドバイスをいただいているようでしたので、勝手ながら私のほうで一旦回答としてマークさせていただきました。
    回答くださったみなさん、アドバイスありがとうございます。

    Rubiaceae
    さんご自身もご理解されているように、情報収集するにも、現在は情報提供不足のようですね。推測だけではこれ以上の情報収集は難しいかと思われますので、その現象の詳細な再現方法を投稿されたほうがよいかと思います。
    みなさんからのアドバイスを参考に、現象の再現手順と確認方法、質問の内容などを整理してみてください。長くなってきましたので新規にスレッドを立てられる場合には、必要に応じてこちらのスレッドのリンクをつけてください。
    なお、Excel についてのご質問となる場合には、Microsoft Answers のほうが情報が得られやすいかと思いますので、そちらのご利用もご検討くださいね。
    よろしくお願いいたします。
                                                                    
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海
    2011年9月2日 4:25