• ベストアンサー

VBAでのセルの参照

VBAであるセルの値をCSV出力にしようしたいと思っています。 対象セルが、ただ値のみが入っているセルならば問題ないのですが、式が入っているセルですと上手くできません。 詳細は以下のとおり セルA1:8.25  セルA2:8.80   セルA3:=A1-A2 (画面には-0.55と表示)で 変数=Cells(3,1).Valueと言った形で、A3の値を変数に受け取ろうとしています。 すると変数には入るべき値の近似値(-0.54999999・・) が入ります。 すべてのセルの書式は数値で、少数第2位までに設定されており、決して上記以外の値が入っていることはありません。 何故、このような現象が起こり、またどうすれば解決できるのでしょう? ちなみに変数=Cells(3,1).Textにすると正しい値(-0.55)が入ります。 .Valueと.Textの違いも教えていただけるとあり難いです。 宜しくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 No.1の方のとおりなのですが、1つ補足を。 >すべてのセルの書式は数値で、少数第2位までに設定されており、 >決して上記以外の値が入っていることはありません。 勘違いされているようですが、セルの書式(表示形式)は、あくまでセルの見た目を設定するもので、中の値を操作するものではありません。 したがって、例えば「0.555」という値を、表示形式で「0.56」としても、値は「0.555」のままです。 そして、Valueプロパティはセルの値そのものを取得し、Textプロパティは、現時点のセルに"表示されている"値を取得します。 つまり、表示形式を変更すると、Valueプロパティの戻り値は変わりませんが、Textプロパティの戻り値は表示形式に合わせて変わるわけです。 それから、もう1つ重要なこととして、浮動小数点誤差の問題があります。 Excelでは、小数の計算をすると、"浮動小数点誤差"を生じます。 浮動小数点誤差に関しては、以下のページを熟読して下さい。 http://pc21.nikkeibp.co.jp/special/gosa/ さて、最後に、今回のような近似値はVBAの方で、Format関数で整形することも出来ます。 Format(Cells(3, 1).Value, "0.00")

参考URL:
http://pc21.nikkeibp.co.jp/special/gosa/
hiro_sun
質問者

お礼

参考URLが大変参考になりました。 有難うございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.1

ヘルプには明記してないようですが、返される値は .Value セルに入っている値そのもの … 数値 .Text 表示される値(セルの書式に従った) … 文字列 になるようですね。

hiro_sun
質問者

お礼

さっそくのご回答有難うございました。

すると、全ての回答が全文表示されます。

関連するQ&A