独身チェック-数字に重複がないかをチェックします。
行/列内の数字が重複していないかのチェック
小ブロック内の数字が重複していないかのチェック-単一の数式とする
チェック方法
行、列、および小ブロック(3×3)内でCOUNTIF関数を用いて重複をチェックします。
下図のシートで、行および列内の数字が重複していたら、黄色のセルにその重複数を表示。
作業表を使う
下図は、作業表を使用した例。
本例では、R3(12行目)で5が重複、C4(4列目)で7が重複
行方向に9列の作業表を作成し、それぞれの列の数字と同じ数字が行全体に何個あるかをカウントする式を立てます。
カウントは複合参照($の位置)に注意して、COOUNTIF関数で容易に求められます。
得られた数字列の中で最大の数字"を表示します。1より大きければ重複あり!
(COUNTIF関数で、さらに1より大きい数字をカウントしても可)
COUNTIF関数の使用例は以下を参考
重複を排除したリストの項目数をカウント1
文字列の中にある指定文字の個数をカウントしたい
列データについても同様。
配列数式を使う
上記は分かり易いのですが、この先、多数のな数式を立てていくことを考えると、なるべく数式をシンプルにしたいものです。
そこで、以降、配列数式を使用します。
(エクセル2007以降に登場するSUMIFSなどは使用しません-下位バージョン互換のため)
配列数式の入力方法
セルM30に =MAX(COUNTIF(C30:K30,C30:K30)) と入力。
CTRL+SHIFT+ENTERを押します。式の前後に { } が付いて配列数式の出来上がり。
それをオートフィルでコピーします。
何故、MAX関数を使用しているか?
配列数式とした式の結果は配列として返ります。
そのままで重複の判定はできないので、単一の数値として判定できるようにMAX関数を使用しています。
COUNTIFをもう一度使用して、2以上の個数をカウントしても可能です。
小ブロック
ここでは作業表と配列数式を使用。
小ブロックの中で、それぞれの数字の個数を調べ、その最大値を得ます。
それを9個のマスとして、その中の最大値を判定すれば重複があるかがわかります。
作業表の中で、9回配列数式を設定するるのが面倒(&間違いの元)ですが、
数式を1種類にすると式が大変長くなるので、ここではあえて9個作成。
下図のように、それぞれの小ブロックに対応する3×3のセルを用意し、
それぞれの小ブロック内での重複数を配列数式で求め、その最大値を表示します。
ここでは、右上のマスで3が重複し、その最大値は2。
さらに、この3×3内の最大値が1より大きかったら「小ブロック内に重複あり」として「×」を表示します。
上記をまとめて、行、列、または、小ブロックでの重複有無を判定すると、下図のようになります。
MAX関数で、行、列、小ブロックの作業表の中の最大値が1より大きかったら「×」を表示。