VBA小数点以下3桁設定の判定方法を教えてください

このQ&Aのポイント
  • Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。
  • 対象セルの NumberFormat の値を「0.000」か「0.000_」で比較してもうまくいかない場合があります。その値が小数点以下ちょうど3桁の有限小数の場合は小数点以下3桁の設定をしても、NumberFormat の値は「General」のままであるのがその理由みたいです(?)。
  • 小数点以下3桁の有限小数であるかの判定方法を別途用意するしかないのでしょうか。その場合は、簡単で正確な判定方法を教えてください。ちなみに小数は8桁以内の整数と8桁以内の整数の商(割り算)になります。
回答を見る
  • ベストアンサー

VBA小数点以下3桁設定の判定方法を教えてください

Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。 小数点以下3桁の設定がされているのか知りたくて、対象セルの NumberFormat の値を「0.000」か「0.000_」で比較してもうまくいかない場合があります。その値が小数点以下ちょうど3桁の有限小数の場合は小数点以下3桁の設定をしても、NumberFormat の値は「General」のままであるのがその理由みたいです(?)。「General」を比較の値に採用しても3桁であるかの情報が得られそうにないと思えるので困っています。小数点以下3桁の有限小数であるかの判定方法を別途用意するしかないのでしょうか。その場合は、簡単で正確な判定方法を教えてください。ちなみに小数は8桁以内の整数と8桁以内の整数の商(割り算)になります。 よろしくお願いします。

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

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

こんにちは。 どういう場合に必要が生じるのか、という具体性について、 私の想定を超えている面もあるので、ニーズに応えられている自信はないのですが。 > Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。 セルの書式設定・表示形式 について 数値を入力した場合に、 "0.000" 小数点以下3桁で表示されるような 設定がなされているかどうか判定したい。 現在表示されている内容(またはセルの値)は問わない。 ということなのだとして、直接的な答として以下。 ' ' /// 小数点以下3桁で表示されるような表示形式設定がなされているか判別 (ReW9075637)   If Trim$(WorksheetFunction.Text(0.434343434343434, Cells(1, 1).NumberFormatLocal)) = "0.434" Then     ' ' 「小数点以下3桁の設定がされている」場合の処理   End If ' ' /// 簡単にというと、こんな感じで如何でしょう? Excel関数の [ =TEXT(値,表示形式) ] を worksheetfunction.Text メソッド で呼び出します。 ここでいう"表示形式"とは、range.NumberFormatLocal プロパティで取得される ローカルのフォーマットです。  ダミーの数値を 引数 "値" に、  そのセルに設定された表示形式を 引数 "表示形式" に、  Excelの()関数にそれぞれの引数を渡して計算させた結果 文字列  を評価して判別します。 前後にスペースがあってもなくても、見た目、"0.000"になるものだけを判別します。 /// 以下、余計なこと、杞憂なのでしょうが、、、。 表示形式といっても、 セルに値(たとえば日付とか)を入力をした時に、表示形式の設定が勝手に変更されてしまう ようなこともありますから、固定的なものとして捉えると、どこかで失敗しそうな気もします。 外部データの取り込みや貼付け等した時に、表示桁数を確認することもありますが、 ソース側で確認しないと、確度は低くなります。 「今表示したいようにする為の、今だけの表示形式」という風に扱っていた方が無難かなぁ というのが私の基本的な'VBAでの'方法論だったりします。 //// さておき。 もしお求めの結果が得られないようでしたら、それはこちらの理解が至っていないせい だと思いますので、再現性のある補足説明を頂ければ、と思います。 以上です。

EulerKnowsNo
質問者

お礼

ご回答ありがとうございます。 質問に間違いがありました。3桁の設定をすれば「General」のままにはなりませんでした。申し訳ありませんでした。 質問の背景についてですが。 高校の情報の授業で生徒が作業した結果を自己採点できる教材を作っています。生徒の回答シートに対しあらかじめ正解シートを用意して、マクロで比較採点する方法をとっています。小数点以下の桁数の設定では、生徒と正解のNumberFormat どうしを比較してます。別解用に具体的な値「0.000」などを使っています。生徒の回答に「General」があってうまくいかなかったので、早とちりして質問しまいました。この生徒はそのセルに桁数の設定をしていなかっただけだったみたいです。ふつうは複数のセルにまとめて書式設定するので、予想外でした。稀なケースでないと思われるようになればご指摘の方法を利用させていただきます。 ありがとうございました。

関連するQ&A

  • エクセル 小数点一桁目を判定

    お尋ねします。 エクセルで次の処理を行いたいのですがどなたか教えて下さい。 1)判定結果が小数点一桁目まで集計計算されます。   例えば、5.6とか3.5とかいった具合です。 2)この集計結果の小数点1桁目をみて、「5捨6入」で判定を行い、切り上げ・切り捨て処理をしたい。 小数点1桁目が「6以上」の場合は切り上げ、「5以下」の場合は切り捨てになります。 例えば、5.6の場合は0.6を切り上げて最終判定は6になり、3.5の場合は、0.5を切り捨てて3となります。 1.7だったら2、6.4であれば6になります。 マクロかVBAを使うことになるのでしょうか? どちらも素人ですのでわかりやすくご指導頂ければありがたいです。 お願い致します。

  • 「小数点以下2桁」と「小数点2桁」

    「小数点以下2桁」と「小数点2桁」 「小数点以下2桁」という表現は正しいかと思うのですが、 同じ意味で「小数点2桁」という記載は正しいのでしょうか? できれば、出展を添えてご教示頂ければ幸いです。

  • エクセルで小数点以下3桁を四捨五入して、小数点以下1桁を表示する方法

    エクセル2003を使用しています。 計算式から出た結果に対して、小数点以下3桁を四捨五入して、小数点以下2桁ではなく、1桁を表示したいです。 例えば、計算式の結果、 1.145 の場合、普通に四捨五入すると 小数点以下1桁なら、1.1 小数点以下2桁なら、1.15 となってしまいます。 これを小数点以下3桁を四捨五入して、小数点以下1桁表示の1.2と表示させたいのですが、可能でしょうか?

  • 小数点以下二桁まで求める?

    小数点以下二桁までの後に、どの動詞を使ったらいいでしょうか? 言いたいのは、小数点以下二桁まで四捨五入で計算すること。 求める?丸める?それとも、ほかの動詞? 日本語学習者です。 よろしくお願いいたします。

  • 小数点以下を強引に表示させたい

    小数点以下を強引に表示させたいと考えています。 具体的には、「130」という値を「130.00」というように、小数点以下2桁まで表示させたいのです。3桁以下は切り捨てます。 これまでは、 $c = $a / $b; round($c, 2); という方法でやっていたのですが、$cがきっちり割り切れる値だと、どうも普通に小数点以下を表示させないようなのです。 例え「00」でも表示させたいのですが、そのような関数はありますでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • わり算の結果が整数でも小数点以下4桁まで表示されてしまう!

    わり算の結果が整数でも小数点以下4桁まで表示されてしまう! 同じような質問で恐縮なのですが、 例えば、100、101というデータをMySQLの算術演算子/を使って2で割ると、 50.0000、50.5000のように、整数だろうが小数だろうが、小数点以下4桁まで出てしまいます。 これを、いろんな関数を駆使して50、50.5にすることはできますか。 50、51または50.0、50.5のように小数点の位置を同じずつ動かすことはできるのですが、これでは嫌だなぁと思った次第です

    • ベストアンサー
    • MySQL
  • 数値を小数点二桁にしたい

    セルに小数点十桁くらい入っているのですが、 表示を小数点二桁にしています。 表示ではなくて、実際の値を小数点二桁に 置き換えたいのですが、簡単に置き換える方法は ありますか?

  • エクセル 小数点以下二桁と小数点以下0桁そのままで

    エクセル2013を使っています。 セルの書式設定の文字列にする方法以外で、教えてください。 小数点以下2桁と小数点以下なしで表示するセルを計算したいのですが、 文字列にすると、計算できないので困っています。 入力した数字そのまま表示し、計算するにはどうすれば良いですか?

  • 小数点以下五桁一致の判定

    ある実数の定数があり、変数をfor文により変化させて、小数点以下五桁が一致したらbreakしたいのですが、判定がうまくできません。 自分が作ったプログラムは、定数をk,変数をjと置くと sa=fabs(k-j); if(sa<1/1000000)break; としました。 一応出るのですが、ループの回数が、最低限にならないです。いい方法を教えてください。

  • アクセスで小数点以下1桁までをインポートしたい

    アクセスのインポートで小数点1桁までをインポートしたいです。 インポートするデータはCSVファイルです。 インポート定義をつける為に、エクセルのデータをCSVにし、CSVをアクセスにインポートしています。 エクセルの時点では、小数点下1桁まで表示されているのですが、CSVに加工した時に小数点以下1桁が0のものは整数表示になってしまいます。 (例)  エクセル → CSV   38.5  → 38.5   35.0  → 35 アクセスでインポートした後に、全部のレコードを小数点下1桁にするのはどうしたらよいのでしょうか?

専門家に質問してみよう