2017-10-25 5 views
1

私は、0から10のスケールに変換したい大きな一連の数値を持っています。一連の数値を0から10の範囲に変換する方法

Iただし、iが最大値は0であるべきであり、最小値は10でなければならない一連の変換いくつかの問題に直面

=IF(A1="-","0",MIN(MAX((A1-MIN(A:A))/((MAX(A:A)-MIN(A:A))/11),0),10)) 

、0〜10、最大値と最小値を変換するために、次の式を使用例えば、列Aに値を有する場合、

は、その後8は0の値を有していなければなりませんnd 1の値は10でなければなりません。

ありがとう!

+1

= MIN(MAX((A1-MIN(A:A))/((MAX(A:A)-MIN(A:A))/ 11)、0)、10) – jsheeran

+1

はい、なぜOPを11で割りますか?それは10ではありませんか? –

+0

ありがとう、@ jsheeran。計算に欠損値が含まれているので、私のために働いていると思われる提案された公式を少し修正しました。 = IF(A1 = " - "、 "0"、10-MIN(MAX((A1-MIN(A:A))/((MAX(A:A)-MIN(A:A)))/10)、0)、10)) – user8830445

答えて

4

式= 10-B1を使用してください。ここで、B1は上記の式を含むセルです。

あなたの式は次のような欠陥を持っていることにかかわらず、注意してください。

  1. それは間違っています。 3つの数字1,2,3でテストすると、2に対応する値は5.5になります。明らかに正しい答えは5になるはずです。このエラーは、(MAX(A: A)-MIN(A:A))。それを10に変更すれば、すべて動作します!

  2. #DIV/0を返します。

  3. この式を含むすべてのセルで時間のかかる関数MAX(A:A)とMIN(A:A)を呼び出すため、非効率的です。これらの2つの関数は数式を含むセルに依存しないため、他のいくつかのセルでそれらを一度しか使用しないようにしてから、関数自体ではなくこれらの外部セルへのリンクを含むように式を変更してください。

  4. メンテナンスが容易ではありません。数式の仕組みを理解するのにはしばらく時間がかかりました。それを意味のある断片に分け、断片を別のセルに置き、最終的にはいくつかの最終的な - そしてはるかに小さな - 式で断片を結びつけることを検討してください。

  5. 不必要に畳み込まれています。基づいて同じことを達成するためにはるかに簡単に式があり、次のよう

= 10 * B1/C1、B1は "最小値からの距離"、すなわちA1-MINが含まれてい

( (A1: " - "、 "0"、A:A)とC1は、あなたの範囲の合計長さを含んでいます。つまりMAX(A:A)-MIN(A:A)

+0

ありがとう、トム。 11を間違えて10に変更しました。この式を使用する理由については、私は0から10までの正規化が必要な複数の列を持っています。列の中には「より高い値=より良い」と残りの部分では「低い値=より良い "。私はまた、値なしで空のセル/セルに0(最も低い値)を割り当てたいと思っていました。この数式を、変換する必要がある列に隣接する列に貼り付けてコピーすると、少し簡単になります。希望は意味をなさない。 – user8830445

関連する問題