[[20110328112131]] 『表示形式の条件付き書式が不可解』(半平太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『表示形式の条件付き書式が不可解』(半平太)

 ご意見をお聞かせください。

 C1:D1に小さいマイナス数値があるとします。(例では、-0.9と-0.1)
 以下のTEXT関数を利用して、ゼロ近辺の大小判定をしようとした、とします。
 ところが、なんか結果が変なんです。

 (1) C2セル =TEXT(C1,"[>=0.99]プラス0.00;[>=0]ゼロ以上0.00;0.00")
 (2) C3セル =TEXT(C1,"[>=0.99]プラス0.00;[>=0]ゼロ以上0.00;0")  上の式の最後の0.00を0に変更
 (3) C4セル =TEXT(C1,"[>=0.10]プラス0.00;[>=0]ゼロ以上0.00;0")   上の式の最初の[>=0.99]を[>=0.10]に変更
 それぞれ右にコピー

 バグを作った人の「考え」をああだ、こうだと面白がって推理する方なんですが、
 今回は、ヘンテコすぎてどうにも思いつかないです。

 (関数の仕様は、左から右の順でチェックして行くと思うのですけどね)

 <結果図>
  行                __C__  ______D______ 
   1                -0.9          -0.1                 
   2  常識的   →   -0.90         -0.10   ←   常識的   
   3  常識的   →      -1  ゼロ以上0.10   ←   理解不能 
   4  常識的   →      -1    プラス0.10   ←   理解不能 

 Excel2007 Windows Vista
 Excel2003 WindowsXP

 -0.1〜-0.4まで同じ挙動、-0.5以下だと正常
 という事だと四捨五入が関係している?

 第3パラメータの桁数を0.00から0にした事で、一番桁の少ないパラメータに
 合わせて四捨五入してから[]内の判定をしているような挙動とも取れますね。

 小数問題が多すぎてエクセルで小数を扱うのが最近嫌な(momo)

 momoさん

 レス有難うございます。

 四捨五入は、何らかの関係があると思うのですが、
 せいぜい0どまりですよねぇ。

 第3パラメータの桁数を優先的にみて、
 プラスマイナスの符合も変えてしまうなんて
 トンチンカンな判定ロジックをどうすれば
 作れるんでしょうかねぇ。

 (半平太) 2011/03/28 15:42

 そうですよね。
 疑問はいっぱい残りますが、新規シートでこんな風にしてみると
 なんらかの関係がある事は確かなように感じますよね。

  Sub test()
  Const parm As String = "[>=0.99]プラス0.00;[>=0]ゼロ以上0.00;"
  Dim i As Long, j As Long, r As Long
  For i = 1 To 3
    With Cells(2, i + 2)
      .Value = parm & Choose(i, "0.00", "0.0", "0")
      .Characters(Len(parm) + 1).Font.ColorIndex = 3
    End With
    For j = 1 To 9
      r = r + 1
      Cells(r + 2, 2).Value = -j * 10 ^ (i - 4)
    Next j
  Next i
  With Range("C3:E29")
    .FormulaR1C1 = "=TEXT(RC2,R2C)"
    .EntireColumn.AutoFit
  End With
  End Sub

 >プラスマイナスの符合も変えてしまうなんて
 この[]で条件を付けた場合って +;−;0;@ というルールから外れるんじゃないでしょうか?
 []の条件1、条件2、・・・というだけな気がします。

 (momo)コードちょっと修正15:57

 > >プラスマイナスの符合も変えてしまうなんて
 > この[]で条件を付けた場合って +;−;0;@ というルールから外れるんじゃないでしょうか?
 > []の条件1、条件2、・・・というだけな気がします。

 これはその通りで、私の方に勘違いはありません。

 符合が変わったと云うのは、
 最初に挙げた例の「D4セルの結果」について述べたものなんですが。

 (0.1のプラス数値として処理されています。)

 (半平太) 2011/03/28 16:05

 >これはその通りで、私の方に勘違いはありません。
 あ、失礼しました。読み違えてたようです。

 D4セルですね。確かにそうですね。
 でも絶対値で見てるか?というとそうでもないですねぇ
 確かに不思議な結果というか不思議な作り方ですね。

 表示形式なんてそこまで深く考えて作られてないのですかね。
 (momo)

 マイクロソフトに以下(抜粋)のように、
 Text関数の話でなく、本物の書式設定の疑問として、
 問い合わせをしてみました。

 私には、なぜ、最初に評価した書式で表示しないのか理解に苦しみますが、
 一介の窓口担当者と議論しても始まらないので、ここまでとしました。

 本トピもここで閉じさせて頂きます。

 ※ 恐らく、カテゴリー判定と表示文字作成が2ステップに分かれており(理由は不明)、
  それぞれ、同じ判定ルーチンを通しているが、 その際、 第2ステップの処理は、
  第1ステップで加工された数値(その加工がまた不適切)を利用してしまう、と云うことらしい。

 momoさん、コメントとテスト用マクロを有難うございました。

 >======================================
 >■ お問い合わせ内容 (原文より一部抜粋)
 >======================================
 >以下の通り、セルに書式を設定すると、正しく判定・表示されないのです。
 >
 >1.サンプル
 >セルに数値「-0.02」があったとします。(マイナス値です)
 >セルの書式(表示形式)で以下の二通りを設定してみました。
 >
 >(1)[赤][>=0.03]0.00"で基準超";[青][>=0.01]0.00"で基準内";0.00"で基準未満"
 >(2)[赤][>=0.03]0.00"で基準超";[青][>=0.01]0.00"で基準内";0.0"で基準未満"
 >
 >註:(1)と(2)の違いは、最後の表示形式を0.00から0.0に変更しただけです。つまり0を一つ減らしただけ。
 >
 >2.セルの表示
 >(1) 「-0.02で基準未満」
 >(2) 「 0.02で基準内」(青色で表示された)
 >
 >3.結果の評価
 >(1)は、期待通りです。
 >(2)は、セル値がマイナスにも関わらず、プラス0.02として評価されています。
 >
 >4.お聞きしたいこと
 >以上のテストはXL2003/WIN-XPでも同じ結果になったのですが、どのような条件が
 >重なると、このような誤表示につながるのでしょうか?仕様をご教示いただきたい。
 >現状ではとても不安を感じます。
 >
 >======================================
 >■ 調査結果
 >======================================
 >添付していただきましたファイルの検証を行った結果、表示桁数を1 桁減らした、
 >[赤][>=0.03]0.00"で基準超";[青][>=0.01]0.00"で基準内";0.0"で基準未満"の [セルの書式設定(表示形式)]で
 >「-」が表示されなくなったり、表示される値が異なる現象につきましては、
 >参照しているセル A1 の桁数と上記の [セルの書式設定(表示形式)] の最後の桁数「"0.0"」
 >が異なるために発生している現象であることを確認いたしました
 >
 >表示形式 「"0.0"」は指定された小数点以下1桁までしか認識されず、それ以下の桁数に関しては四捨五入されます。
 >
 >Excelの意図した動作として「-0.02」などのように「-」があり小数点以下に数値がある
 >場合に、小数点第1位までを表示する表示形式を用いると、絶対値として認識されるため
 >
 > 例:「-0.02」 → 表示上は「0.0」でもExcel の内部処理として「0.02」と認識されて
 >おります。
 >
 >そのため『 [青][>=0.01]0.00"で基準内 』の条件に合致していると判断し添付していただいたファイルの表示状態になります。
 >『 [青][>=0.01]0.00"で基準内 』は小数点以下の桁数が2桁のため『0.02で基準値内』と青で表示されます。
 >
 >桁数が実際に参照された桁数と異なっているため、四捨五入された数値が絶対値として
 >認識され、今回の現象に至っているものと推察されます。
 >
 >正しい結果が表示されない、B 2 のセルで [ホーム] タブの [数値] グループにある
 >[小数点以下の表示桁数を増やす] をクリックし桁数を1桁増やすことで、正しい結果が
 >表示されることをご確認ください

 (半平太) 2011/03/31 15:31

 理由は納得までいかないまでも、ある程度予測の範囲に近い感じなんですね。

 でも、だからそれをバグではなく正当であるかのような回答は
 さすがMicroSoft様という印象ですね。

 半平太さんのモヤモヤが治まると良いですが^^;
 (momo)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.