2

ここでの最初の質問なので、何か問題があっても私を殺さないでください。このサイトで多くの解決策を見つけましたが、今回は見つかりませんでした。残念ながら、まだ画像を投稿できません。簡単ではありませんが、やってみます。

ポイントへ:

私のデータには次のヘッダーがあります。

Decision_Id 相手 1 相手 2 相手 3 求婚者 1 求職者 2 求婚者 3 求婚者 4

Decision_id は一意の整数識別子です。残りは文字列です。

各行は、特定の司法判断を表します。各決定には、最大 3 人の反対者 (防御側) と最大 4 人の求婚者 (攻撃側) を含めることができます。特定の当事者は、ある決定では求婚者になり、別の決定では反対者になることができます。

私が取得したいもの:

行ヘッダーと列ヘッダーの両方が、テーブル内で遭遇するすべての異なるパーティであるクロス テーブル。(それで問題ありません。完了です。)各セルが、特定の対戦相手(行ヘッダーで定義)が特定の求婚者(列ヘッダー)によって攻撃された個別の決定の数を示す場所 => すべての対角セルはゼロに等しい(パーティーはできません攻撃自体)、テーブルは対称ではありません。

私が試してみました

最初のセルに適用してから展開します。

=COUNTIFS("すべての対戦相手の固定範囲 :$B$2:$D$6","希望する対戦相手の値 : $A2", "すべての求婚者の固定範囲 :$E$2:$H$6", "希望する求婚者の値: B$1")

エラーが発生しました。基準範囲は同じサイズでなければならないことがわかりました。OK、ダミーの空の列を作成しました => エラーはありませんが、結果は明らかに過小評価されています。相手と求婚者の「数」が同じでないと勝負はないと思います。詳細: 各行について、相手 1 と suitor1 を対応する値に対して Excel テストし、次に相手 2 と suitor2、次に相手 3 と suitor3 をテストします。これは、範囲が同じサイズでなければならない理由を実際に説明しています。

だから、私が必要とするもの

行ごとに、希望する相手の値に向かってすべての相手をテストし、希望する求婚者の値に向かってすべての求婚者をテストします。少なくとも 1 人の対戦相手と 1 人の求婚者が対応する場合、一致させ、この決定をカウントします (対戦相手 1 と求婚者 3 が必要な値を持っていたとしても)。

備考

私はすでに仕事をする VBA コードを作成しましたが、遅すぎます (テーブル全体で約 5 時間)。この種のさまざまなテーブルに対して同じことをしたり、これを変更したりすることを期待しています。だから私は「純粋なエクセル」、高速なソリューションに興味があります。

どうもありがとうございました!

4

3 に答える 3

2

ここで難しいのは、複数列の範囲を別々の行に分割することです。これを行う 1 つの方法は、OFFSETwithin COUNTIF、つまり次の式を使用することです。

=SUMPRODUCT(COUNTIF(OFFSET($B$2:$D$6,ROW($B$2:$D$6)-ROW($B$2),0,1),$A2),COUNTIF(OFFSET($E$2:$H$6,ROW($E$2:$H$6)-ROW($E$2),0,1),B$1))

これは、すべての求婚者が任意の行で異なり、すべての対戦相手が任意の行で異なることを前提としています (ただし、そうでない場合は式を変更できます)。

範囲は任意のサイズに拡張できますが、各パーツの行数は同じでなければなりません

....または、MMULT関数を使用した別のよりあいまいな方法があります

=SUMPRODUCT(MMULT(($B$2:$D$6=$A2)+0,{1;1;1}),MMULT(($E$2:$H$6=B$1)+0,{1;1;1;1}))

{1;1;1} と {1;1;1;1} は各セクションの列数を表すため、6 と 8 がある場合は、それに応じて変更する必要があります

于 2013-08-05T11:16:59.907 に答える
1

別の可能性は、次の配列数式を試すことです。

=SUM(MMULT(-TRANSPOSE($B$2:$D$6=$A2),-($E$2:$H$6=B$1)))

CTRL+SHIFT+ENTER を使用して入力します (または、名前として定義し、通常どおり入力します=Total。)

于 2013-08-05T20:31:19.773 に答える
0

これはそれを行う必要があります:

=       COUNTIFS($B$2:$B$6,$A2, $E$2:$E$6, B$1) 
      + COUNTIFS($C$2:$C$6,$A2, $E$2:$E$6, B$1)
      + COUNTIFS($D$2:$D$6,$A2, $E$2:$E$6, B$1)
      + COUNTIFS($B$2:$B$6,$A2, $F$2:$F$6, B$1)
      + COUNTIFS($C$2:$C$6,$A2, $F$2:$F$6, B$1)
      + COUNTIFS($D$2:$D$6,$A2, $F$2:$F$6, B$1)
      + COUNTIFS($B$2:$B$6,$A2, $G$2:$G$6, B$1)
      + COUNTIFS($C$2:$C$6,$A2, $G$2:$G$6, B$1)
      + COUNTIFS($D$2:$D$6,$A2, $G$2:$G$6, B$1)
      + COUNTIFS($B$2:$B$6,$A2, $H$2:$H$6, B$1)
      + COUNTIFS($C$2:$C$6,$A2, $H$2:$H$6, B$1)
      + COUNTIFS($D$2:$D$6,$A2, $H$2:$H$6, B$1)

データをテーブルにするか、Opponent1、Opponent2、Suitor1 列などの名前付き範囲を定義すると、これらはより単純に見えます...

于 2013-08-05T07:44:07.193 に答える