私は選挙結果を追跡し、選出された代表者を返すためのスプレッドシートを作成しています。私たちは比例代表制を採用しており、改良サント・ラグエ法選挙結果はスプレッドシートに入力され、特定の数値 (適用法で義務付けられているように、1.4、3、5 など、最大 15 の 8 つの商) で割って、議席を配分する商を算出します。条件付き書式を使用すると、スプレッドシートは上位 8 つの数字を強調表示し、誰がどのポジションを獲得するかを示します。これはすべて意図したとおりに機能します。
a) 8 つの成功した候補のリストを返すこと、b) そのリストが数値ではなくセル参照 (例: D7) を返すようにする必要があります。 関数を使用していろいろ試してみたところLARGE
、基本的に という数式を使用して、C24:C31 の上位 8 つの商を正常に返すことができました。=LARGE($C$2:$J$21, ROW()-23)
ただし、これらの商のグリッド座標を返すことはできません。
下のスクリーンショットは、私が実現したいことのモックアップを示しています。緑色で強調表示されたセルは、条件付き書式設定の結果として強調表示されたもので、C2:J21 の 8 つの最大値です。黄色で強調表示されたセルは、私が実現したいものです。明確にするために、セル参照 C2:J5 のデータは数式によって生成され、同様に C24:C31 の値は、上記の緑色で強調表示された 8 つの値と同じで、数式によって生成されています。非表示の行 6 から 21 は、基本的に行 1 から 5 の複製です。スプレッドシートをアップロードしました。グーグルドライブ
答え1
これは難しいですね。
=MIN(IF($C$2:$J$21=価値、ROW($C$2:$J$21)))最初の行の番号を見つけるには
value
表示されます。同様に、=MIN(IF($C$2:$J$21=価値、列($C$2:$J$21)))最初の列の番号を見つけます
value
が表示されます。上記は配列数式です。
上位8つの値がC2:J21
一意である場合、
上記を使ってそのグリッド内の値を検索することができます。
インデックス($A$1:$J$21,行番号、列番号)そのセルにインデックスを付けて、
CELL("アドレス", INDEX(上記))そのセルの行と列のアドレスを取得します。
それで、
=CELL("アドレス", INDEX($A$1:$J$21, MIN(IF($C$2:$J$21=C24,ROW($C$2:$J$21))), MIN(IF($C$2:$J$21=C24,COLUMN($C$2:$J$21)))))セルに入力し
B24
、Ctrl+ Shift+を押してEnter、下までドラッグ/入力しますB31
。
ノート:
CELL("address", …)
絶対アドレス(ドル記号付き)を返します。ドル記号が不要な場合は、次のようにします。=SUBSTITUTE(セル(何とか何とか何とか)、"$"、"")
- これは重複した値をうまく処理しません。たとえば、
E3
に加えて 8 も含まれている場合D4
、両方ともD3
(最初の行と最初の列) にあると報告されます。これを修正するのは非常に難しいかもしれませんが、テスト そのような偶然が起こったかどうかを確認し、手動で修正できるようにします。 - これをすべて 1 つのセルで実行することもできますが、行と列の値にヘルパー列を使用すると、長期的には作業が簡素化される可能性があります。
この答えは、この答えバリー・フーディーニ著。