アーティサン株式会社
  • Power Apps
  • Power Platform

Power Appsでデータの順位を求める方法(RANK()関数と同等機能の実装方法)

こんにちは。アーティサン株式会社の小刀稱(ことね)です。

この記事を書いた人
小刀稱知哉

小刀稱 知哉ことね ともや

SharePoint Power Platform全般 Copilot Studio 技術アドバイス・教育支援

Power PlatformやSharePointを中心に設計・開発・アドバイス・教育まで幅広く担当しています。内製化をご希望の場合はお気軽にお問い合わせください!

2025 Microsoft MVP(Power Apps・Power Automate) 2026 Microsoft MVP(SharePoint・Power Automate)
PL-200 PL-300 PL-400 PL-600 MS-700 AZ-104 AZ-305 SC-200 SC-100

Power Apps には Excel の RANK()関数が用意されていません(記事執筆時点)。そのため、CountRows()Filter() を組み合わせて「自分より得点が高いレコード数+1」を順位として計算します。

本記事では、学生と得点のコレクションを用意し、AddColumns() で「順位」列を追加して RANK()相当のランキング表示を実装します。さらに、同点時に比較演算子へ イコール(>=)を足してはいけない理由も解説します。

今回は、Power Appsでデータの順位を求める方法についてご紹介します。

Excelでは、標準で提供されているRANK()関数を用いれば、データの順位を求めることができます。

しかし、「Power AppsではRANK()関数をサポートしていません。(2021年9月現在)」

よって、Power Appsでデータの順位を求めるためには、関数を組み合わせ、RANK()関数と同等の機能を実装する必要があります。

この記事の式は、そのままでも使えますが、実データ(SharePoint / Dataverse)に当てはめると「委譲」「データ量」「同点時の仕様」などで設計が分かれます。

Power Apps / Power Automate の内製化や設計レビューが必要な場合は、状況を整理した上で実装方針をご提案できます。

ExcelのRANK()関数について

Excelでデータの順位を求める場合、RANK()関数を用いることで対応可能です。

例を以下に示します。

得点が最も高い学生の順位は1、次に得点が高い学生の順位が2…となっています。
また、同点の場合は、同じ順位(以下例では、2位が2人存在)となります。

RANK()関数の詳細は以下を参考にしてください。

RANK 関数

ExcelのRANK()関数

Power AppsでRANK()関数を実装する

冒頭でもお伝えした通り、「Power Appsでは現時点でRANK()関数はサポートされていません。」
そこで、Power Apps内の関数を組み合わせることで、RANK()関数と同等の機能を実装していきます。

では早速、実装の流れを紹介していきます。

(1)学生と得点を格納するコレクション(colPoints)を作成

学生と得点を格納するコレクションを作成します。

ボタンを準備し、「OnSelect」プロパティに以下の関数を記載します。

ClearCollect(colPoints, 
   {学生: "A", 得点: 100}
   , {学生: "B", 得点: 87}
   , {学生: "C", 得点: 67}
   , {学生: "D", 得点: 87}
   , {学生: "E", 得点: 45}
)
colPoints

(2)colPointsの得点列を基準として、順位付を行うためのコレクション(colPointsAndOrder)を作成

本記事のメインであるRANK()関数を実装していきます。

いきなりですが、完成形を記載します。

ClearCollect(colPointsAndOrder,
    AddColumns(colPoints As tmpThisRecord, "順位", CountRows(Filter(colPoints, 得点 > tmpThisRecord.得点)) + 1)
);
colPointsAndOrder

実装のキーポイントとしては、CountRows(Filter(colPoints, 得点 > tmpThisRecord.得点)) + 1の部分です。

考え方を説明していきます。

  • 「tmpThisRecord.得点」はcolPointsの得点列の各値を示します。(下図(1))

  • Filter()関数では、「tmpThisRecord.得点」より大きい得点を持つレコードを抽出します。
    また、CountRows()関数では、Filter()関数で得たレコード数(=0から始まる順位)を返します。
    最後に、CountRows()関数の結果に1を加算することで、1から始まる順位を得ることができます。(下図(2))

考え方

ちなみに、CountRows()関数の結果に1を加算せず、Filter()関数内の比較演算子を「以上(>=)」にすれば良いのでは? と思った方がいらっしゃるかもしれませんが、これは間違いです。

Filter()関数内の比較演算子にイコールを追加してはいけません。

なぜかというと、同点の場合、同順位の最大値が格納されてしまうためです。

通常は、同順位の最小値を求める必要があるので、イコールを追加しないようにしてください。

イコールを追加した場合

本記事では、Power AppsでRANK()関数と同等の機能を実装する方法について紹介しました。

関数を組み合わせて新しい関数を作成する場合、実装のアイデアが必要となります。
(実は、本アイデアは社内のPower Platformでのソリューション提案や実装の経験が豊富な方に教えていただきました(笑))

このような内容は、「知っていれば一瞬」ですが「知らなければ多くの時間が必要」となります。

当社では、今回のような実装のアイデアを多く発信していく予定ですので、是非今後ともご覧ください。

最後まで読んでいただき、ありがとうございました!

順位付けは実装できても、実案件では「データ構造」「性能」「同点の扱い」「画面設計」まで含めて最適化が必要になることが多いです。

Power Platform の導入・開発・内製化支援として、要件整理〜実装までの進め方をご相談いただけます。

 

こちらも合わせて読みたい