• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA小数点以下3桁設定の判定方法を教えてください)

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

このQ&Aのポイント
  • Excel Vbaで小数点以下3桁の設定がされているか判断する方法を教えてください。
  • 対象セルの NumberFormat の値を「0.000」か「0.000_」で比較してもうまくいかない場合があります。その値が小数点以下ちょうど3桁の有限小数の場合は小数点以下3桁の設定をしても、NumberFormat の値は「General」のままであるのがその理由みたいです(?)。
  • 小数点以下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