VBAで配列のモードを見つけようとしています。
映画のタイトルの動的なリストがあるとします。A:A と同じ長さのリスト B:B があり、これは映画の「タイプ」のリストです。
特定のタイプの、最も繰り返し使用されている上位のタイトルを見つけようとしています。
注: A:A は動的リストであり、その長さはわかりません。
---------------------------------
-Finding Nemo - Cartoon
-Finding Nemo - Cartoon
-Finding Nemo - Cartoon
-Finding Nemo - Cartoon
-Finding Nemo - Cartoon
-Inception - Action
-Inception - Action
-Inception - Action
-Dragon Ball - Cartoon
-Dragon Ball - Cartoon
-Dragon Ball - Cartoon
---------------------------------
この表を例にとると、Finding Nemo は最も多く出回っているタイトルです。しかし、その結果を返す関数を書く必要があるでしょうか?
私はこれに似た機能を想定しています:
=movieMode(5)
5 は、返してほしい「上位」の結果の数を指定します。
ここでの問題は、A:A が動的な長さの場合にこれを行う方法がわからないことです。また、返される結果の数を制御する方法。デフォルトで「漫画」のみを検索するフィルターを設定する必要があります。
これについていくつかの光を共有してください。
アップデート
いろいろ調べた結果、この式を見つけました。
=INDEX(A2:A177,MATCH(MAX(COUNTIF(A2:A177,A2:A177)),COUNTIF(A2:A177,A2:A177),0))
これは、2 つの条件の下で、最も多く発生したタイトルを返します。
- Ctrl+Shift+Enter を使用します (範囲をループしているように見えますか?)
- 指定した範囲内に空白はありません。
type
この数式を改善して、が Cartoon で、A'x' が空でない場合にE:E を取るようにする必要があります。(範囲が空の場合、この式は機能しないようです。
これは、Excel 数式を使用する最初の日であり、すでにこれに遭遇しています。笑
更なるアップデート
上記のシナリオを考慮して、 =movieMode(2) を使用することを期待しています
結果は
----------------------------
-Finding Nemo - 5
-Dragon Ball - 3
----------------------------
「漫画」フィルターがデフォルトで関数に設定されることを期待しています。アクションがどの時点でも表示されたり、変数になったりすることは決してありません。
ただし、使用する場合
-movieMode(1)
期待される結果は
-------------------
-Finding Nemo - 5
-------------------