"無視"を0(ゼロ)または1(1)として扱うことで、ルールセットを属性(IsCool、IsNerdy、HasChildなど)のすべての可能な組み合わせに変換できます。
したがって、質問ルールセットの最初のルールは2つのルールに置き換えられます。
IsCool ¦ IsNerdy ¦ HasChild¦ Group 1 ¦ 1 ¦ 0 ¦ A 1 ¦ 1 ¦ 1 ¦ A
の3つの属性間の唯一の8の可能性がありますが、このアプローチは、8つの以上のルールにつながることができます。たとえば質問のルールセットでは、(1,1,1)で与えられたデータタプル(IsCool、IsNerdy、HasChild)を持つ人物は、ルールセット内の「無視」が展開されるときにグループAとグループBの両方に一致しますこの方法では。グループAとBとのマッチングがBよりも優先されるので、ルックアップテーブルは(1,1,1、A)を行として含むが除外(1 、1,1、B)。
より多くの属性を含むより大きなルールセットでは、ルールテーブルから必要なVLOOKUP
テーブルを構築するタスクは、特に非手動アプローチが望ましく、ExcelだけでなくExcel VBAと共に
代替案ルールセットをデータとして扱うVBAを伴わないものは次のとおりです。上記導入された表記法を定式化
は、n個の属性を含むルールがr[i] (i=1,...,n)
が0
、1
又は"ignore"
とG
の値を取ることができる
(r[1],r[2],...,r[n],G)
として表すことができ、グループ(A、B、Cのいずれかを表します。または質問の例ではD)。
データのインスタンスが同様に存在
r[i] = "ignore" OR "d[i] = r[i]" for each i from 1 to n
場合、ルールが一致するd[i] (i=1,...,n)
が0
または1
(ただし"ignore"
)の値をとる
(d[1],d[2],...,d[n])
として表すことができます。これをExcelで実装するのはかなり明白な方法です
もちろん、関連するセルの参照が
...
速記を置き換えるために上に示した
d[i]
と
r[i]
プレースホルダ及びsは
AND
の内側にネストされている
OR
」の適切な数の代わりに使用され、
=AND(OR(r[1]="ignore",d[1]=r[1]),OR(r[2]="ignore",d[2]=r[2]),...,OR(r[n]="ignore",d[n]=r[n]))
。
上記の疑似式の値は、TRUE
またはFALSE
のいずれかで、前者はルールに一致するデータインスタンスを示し、後者はそうでないことを示します。
しかし、これはルールが依然として優先順位順に適用される必要があるため、ストーリーの終わりではありません。
そこで、さらに表記を拡張、ルールは優先順にリストされていることを前提と(ルール1等ルール3、より高い優先度を有するルール2、より高い優先順位を有する)
セルC [場合k]がC [k]は、今式
=IF(OR(C[1],...,C[k-1]),FALSE,AND(...))
はそのk番目のルールを確実に有するように、上記擬似式を修正し、データのインスタンスにk番目のルールを適用した結果を保持しています以前の(したがってより高い優先度の)ルールが一致しない場合にのみマッチさせることができます。ここで、IF
の3番目の部分は、前述のAND
の式です。
以下のscreengrabは、質問の例についての実際の取り組みを示しています。
![screenshot of classifying data using rules](https://i.stack.imgur.com/g1BSg.png)
青のセルは数式です。 2番目の表のTRUE/FALSE値のものは、上記の擬似式を実装しています。例えば、細胞F13
は(0,0,0)データインスタンスにルール1を適用した結果を示しており、以下の式
=AND(OR($C$5="Ignore",$C$5=$C13),OR($D$5="Ignore",$D$5=$D13),OR($E$5="Ignore",$E$5=$E13))
NB有する:いいえがあるので、ニーズがこの式に巻き付けされるNOの場合をルール1よりも優先順位が高いルール
セルI13
の式は、ルール4を同じデータインスタンスに適用した結果を示しており、ルール1,2および3に応じたより高い優先順位を考慮する必要があります。このセルの中には、
=IF(OR($F13:H13),FALSE,AND(OR($C$8="Ignore",$C$8=$C13),OR($D$8="Ignore",$D$8=$D13),OR($E$8="Ignore",$E$8=$E13)))
セルG13
およびH13
の式は、I13
の式に似ています(練習として残しました)。
各行に最大でも1つのTRUE値があり、ルールセットが健全な場合は、そのような値が1つだけ存在する必要があります。 2番目の表の最後の列にある数式は、ルールセットに関するこの推測を行い、TRUEと表示されているルールに対応する最初の表の最後の列から関連する値を単純に取り出します。細胞J13
で
式は範囲F13:J13
で
=INDEX(F$5:F$8,SUMPRODUCT(1*(F13:I13),F$12:I$12))
式は単に細胞応答をF14:J20
うわー!私はこれを試してみて、詳細を理解してください... – oal100
入れ子にされたIFなしで優先順位をつけることはできないと思います。しかし、それについて考えた後、これは真にエレガントな解決策です。 – oal100