- 締切済み
上位5つの数の合計
範囲の中から上位5つの数の合計を表示するにはどうすればいいですか? rank.eqとsumを使いますか?
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- NuboChan
- ベストアンサー率47% (785/1650)
求められていないいませんがVBAでのサンプルです。 範囲をA列だとしています。 Sub Top5Sum() Dim rng As Range Dim arr() As Variant Dim i As Long, j As Long Dim temp As Variant Dim sum As Double ' A列の範囲を取得 Set rng = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) ' A列の値を配列に格納 arr = rng.Value ' 配列を降順にソート For i = LBound(arr) To UBound(arr) - 1 For j = i + 1 To UBound(arr) If arr(i, 1) < arr(j, 1) Then temp = arr(i, 1) arr(i, 1) = arr(j, 1) arr(j, 1) = temp End If Next j Next i ' 上位5つの数の合計を計算 For i = LBound(arr) To UBound(arr) If i > 4 Then Exit For sum = sum + arr(i, 1) Next i ' 結果を表示 MsgBox "上位5つの数の合計は " & sum & " です。" End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
#3です。後刻やってみたら、(既出回答に無いタイプで)配列数式利用で、下記でもできそうです。 A1:A10まで1-10の数を入れる(実は値は何でもよいが)。 どこか空きセルに、この例ではF1に上位5位までなら6を入れておいて、 答えを出すセルに =SUM(IF(RANK(A1:A10,$A$1:$A$10)<$F$1,A1:A10,0)) と入れて、SHIFT+CTRL+ENTER(CSEと言われる。配列数式です。)。 結果 40 式の意味は「そのセルのデータのランクが5位までなら、そのセルの値を足す、でなければ0を足す。これをA1:A10までについて行う」。
- imogasi
- ベストアンサー率27% (4737/17069)
ここに今まで質問する人には、なかなか判ってもらえないが、あえて下記を提案する。 空いた列(下記ではE列とした)にRank関数やRank.EQ関数を使って、その列に関数で、ランクの数字を各行に出し、 =SUMIF(E1:E11,"<=5",A1:A11) で該当データ合計を出すのがお勧め。 ーー 他にも作業列の使用を覚悟すれば、考え方が易しくなる課題が多い。 関数の組み合わせで出来るが、考え付くのが難しいのは、このタイプが相当ある。 中間結果を頭の中では一瞬で思いついてその先考え付くが、エクセルはそれ(データ群になる)を、一時変数として式内で考えられないのが、欠点(限界)である。配列数式はそれをこなしている稀有なやり方である。 其の後ゆっくり、「作業列をなくして、該当計数を出すにはどうしたらよいか」を考える。 すると配列数式やSIMPRODUCTやその他関数や、VBAなどが方法として浮かび上がる。 仕事などでこなすときは、数日掛けて質問コーナーに質問している間が許されず、出来るやり方ででもできる方法を考えておく必要がある。 また上記E列が目障りなら非表示にする手もある。
- msMike
- ベストアンサー率20% (364/1804)
=SUMPRODUCT((RANK.EQ(範囲,範囲)>0)*(RANK.EQ(範囲,範囲)<6)*範囲)
- SI299792
- ベストアンサー率47% (774/1621)