![Excel 2021で類似の最初の列のデータの平均を見つける](https://rvso.com/image/1692517/Excel%202021%E3%81%A7%E9%A1%9E%E4%BC%BC%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E5%88%97%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%B9%B3%E5%9D%87%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B.png)
答え1
データを画像のみで提供されたことを考慮して、次の範囲内でランダムなデータを作成しましたA1:E17
。
あ | B | C | だ | え |
---|---|---|---|---|
142 | 0.02 | 0.19 | 0.83 | 0.14 |
142 | 0.65 | 0.61 | 0.38 | 0.82 |
142 | 0.60 | 0.34 | 0.36 | 0.37 |
141 | 0.98 | 0.95 | 0.23 | 0.97 |
141 | 0.83 | 0.24 | 0.50 | 0.67 |
141 | 0.02 | 0.14 | 0.33 | 0.23 |
140 | 0.33 | 0.14 | 0.85 | 0.64 |
140 | 0.78 | 0.09 | 0.17 | 0.06 |
139 | 0.08 | 0.70 | 0.26 | 0.26 |
139 | 0.25 | 0.16 | 0.35 | 0.67 |
138 | 0.52 | 0.44 | 0.18 | 0.44 |
138 | 0.21 | 0.93 | 0.04 | 0.23 |
138 | 0.66 | 0.33 | 0.72 | 0.39 |
138 | 0.91 | 0.91 | 0.51 | 0.30 |
137 | 0.39 | 0.60 | 0.28 | 0.46 |
137 | 0.43 | 0.81 | 0.41 | 0.14 |
G2
ここで、たとえばセルにH2
次の数式をそれぞれ入力します。AVERAGEIF()
数式は追加の列に対して繰り返すことができます。
=SORT(UNIQUE($A$2:$A$17))
=AVERAGEIF($A$2:$A$17,$G$2#,B2:B17)
ここで、追加の説明をします。UNIQUE()
関数を使用して、一意の ID を抽出できます。この関数は配列を返します。この配列は、AVERAGEIF()
自動的にスピルするように使用できます。SORT()
関数は、ID 値を昇順に並べるために使用されます。関数ではAVERAGEIF()
、最初に ID を検索する範囲 (列など) を指定しますA
。次に、取得した配列である基準を指定しUNIQUE()
、最後に平均化する列を指定します。
出力は次のようになります。
ID | 平均 |
---|---|
137 | 0.41 |
138 | 0.57 |
139 | 0.17 |
140 | 0.55 |
141 | 0.61 |
142 | 0.42 |
すべての平均に 1 つの配列としてアクセスし、すべての数式を 1 つのセルに含める拡張機能:
ユースケースによっては、すべての平均値を 1 つの配列としてアクセスしたい場合があります。これを実現するには、AVERAGEIF()
関数を で囲みますHSTACK()
。その場合、数式は関数によって下にUNIQUE()
、関数によって右に広がりHSTACK()
ます。その場合、すべての数式が 1 つのセルに収まるため、メンテナンスが簡単になることもあります。
=HSTACK(
AVERAGEIF($A$2:$A$17,$G$2#,B2:B17),
AVERAGEIF($A$2:$A$17,$G$2#,C2:C17),
AVERAGEIF($A$2:$A$17,$G$2#,D2:D17),
AVERAGEIF($A$2:$A$17,$G$2#,E2:E17)
)
数式がまだセル内にあると仮定するとH2
、次のようにして完全な配列にアクセスできます。
=SUM(H2#)
コメントに基づいてダイナミック レンジを含めるように拡張:
これを実現するには、次のようなステートメントを使用できますLET()
。
=LET(
lastCol, "E",
data, INDEX(A:A,2):INDEX(INDIRECT(CONCATENATE(lastCol, ":", lastCol)),
MAX(IF(A:A<>"", ROW(A:A)))),
id, SORT(UNIQUE(INDEX(data,2,1):INDEX(data,ROWS(data),1))),
b, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,2)),
c, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,3)),
d, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,4)),
e, AVERAGEIF(INDEX(data,,1), id, INDEX(data,,5)),
HSTACK(id,b,c,d,e)
)
まず、データを含む「最後の」列を指定します。行数は列に基づいて自動的に計算されるA
ため、使用するデータの下にデータがないことを確認する必要があります。その他のすべての側面は、ステートメントでラップされているだけで、中間結果を保存LET()
できるため、を介してデータ範囲に動的にアクセスできますINDEX()
。
このアプローチは、あなたが求めていたものを実現します。ただし、注意点として、現時点では各列に対して数式を繰り返す必要があるため、多くの列に必ずしもうまく拡張できるわけではありません。理論的には、このディメンションもより動的にできるはずですが、それはここでの拡張機能の範囲を超えています。