Excel で2 つの列を基に順位付けするにはどうすればよいですか?
名前と2 種類のスコア(たとえば、テスト結果、プロジェクト評価、複数期間にわたる販売データなど)を含むExcel データセットを扱う際、これら2 つのスコアを組み合わせて名前を順位付けしたい場面がよくあります。このような要件は、奨学金の授与、トップ営業担当者の選定、あるいはコンペティションにおける2 つのセグメントの結果を統合するなど、全体的なパフォーマンスや総合成績を評価する必要があるシナリオで頻繁に見られます。しかし、残念ながらExcel には複数の列に基づいて直接順位付けを行う関数は用意されておらず、目的の順位付けを実現するには工夫を凝らした解決策が必要です。
2 つの列に基づく順位付け
2 つのスコア列に基づいて名前を順位付けする効率的な方法の一つは、両方のスコアを組み合わせたカスタム数式を使うことです。通常、最初のスコアを主な基準とし、2 番目のスコアを同順(タイ)解消のための補助基準として活用します。このアプローチは、補助的なパフォーマンス指標に基づいて同順のスコアに対して元の順序を保ちたい場合に特に役立ちます。
この方法を適用するには、以下の手順に従ってください。
1.順位付けの結果を表示する空白セルを選択します。たとえば、セル D2 を選択します。
2.次の数式を入力します。
=RANK(B2,$B$2:$B$7)+SUMPRODUCT(--($B$2:$B$7=$B2),--(C2<$C$2:$C$7)) この数式はまず、最初のスコア列に基づいて順位を算出します。同順(スコアが重複)がある場合は、2 番目のスコアを使って順位を調整し、補助的な値により同順のエントリを再順位付けします。SUMPRODUCTの部分が同順解消の役割を果たし、最初のスコアが同じで2 番目のスコアが低いインスタンスをカウントします。
3.数式を確定するには、Enterキーを押してください。
4.フィルハンドルを下にドラッグして、列 D の他のセルにもこの数式を適用してください。
この数式では、B2 および C2 がそれぞれ最初のスコア列と2 番目のスコア列の先頭データセルを参照しており、$B$2:$B$7 および$C$2:$C$7 はすべてのスコアを含む範囲を示しています。データ範囲が異なる場合は、これらのセル参照を適宜調整してください。
この方法は、小規模から中規模のデータセットや、単に次のスコア列を同順解消に用いる場合に最適です。ただし、大規模なデータセットを扱う場合や、より複雑な順位付けルールが必要な場合は、以下の代替アプローチをご検討ください。
VBA コード – 大規模データセットやカスタマイズされた順位付けルール向けに2 つの列に基づく順位付けを自動化
大規模なデータセットを扱う場合や、より多くの条件を組み込んだり可変範囲に順位付けを適用するなど、カスタマイズされたロジックに基づいて順位付けを自動化したい場合は、VBA が実用的な解決策です。このアプローチは、数式を手動で適用するのが煩雑になる場面や、複数のシートにわたってバッチ処理を行う必要がある場合に最適です。
1.開発者向けツール>Visual Basicをクリックします。Microsoft Visual Basic for Applicationsウィンドウが開いたら、挿入>標準モジュールをクリックし、次のコードをモジュールにコピー&ペーストしてください。
Sub Rank_Two_Columns()
Dim lastRow As Long
Dim ws As Worksheet
Dim rngScore1 As Range, rngScore2 As Range, rngRank As Range
Dim i As Long, j As Long
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set ws = Application.ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row 'Assume scores are in columns B and C
Set rngScore1 = ws.Range("B2:B" & lastRow)
Set rngScore2 = ws.Range("C2:C" & lastRow)
Set rngRank = ws.Range("D2:D" & lastRow)
For i = 1 To rngScore1.Rows.Count
Dim rankCount As Long
rankCount = 1
For j = 1 To rngScore1.Rows.Count
If rngScore1.Cells(j, 1).Value > rngScore1.Cells(i, 1).Value Then
rankCount = rankCount + 1
ElseIf rngScore1.Cells(j, 1).Value = rngScore1.Cells(i, 1).Value Then
If rngScore2.Cells(j, 1).Value > rngScore2.Cells(i, 1).Value Then
rankCount = rankCount + 1
End If
End If
Next j
rngRank.Cells(i, 1).Value = rankCount
Next i
End Sub このコードは、まず列 B の第1 スコアに基づいて行を順位付けし、同順が生じた場合は列 C の第2 スコアを使って順位を決定します。順位付けの結果は、列 D(D2 セル以降)に出力されることを前提としています。データ構成が異なる場合は、列のアルファベットや範囲を適宜調整してください。
2.コードを実行するには、VBA エディタを閉じてExcel に戻り、Alt + F8を押してマクロダイアログを表示し、Rank_Two_Columnsを選択して実行をクリックします。すると、順位付け結果が列 D に表示されます。
マクロを実行する前に、Excel でマクロが有効になっていることを必ず確認し、マクロ操作は取り消せないため、作業内容を事前に保存してください。特に大規模なデータセットでは、この VBA ソリューションが数式を手動でコピーするよりもはるかに高速に順位付け処理を完了します。
「インデックスが範囲外です」などのエラーが発生したり、順位付け結果が表示されない場合は、対象範囲に空白行が含まれていないことと、コード内でスコア列が正しく参照されていることをご確認ください。
その他のExcel の組み込み機能 – 補助列を使用して2 つのスコアを結合し順位付け
配列数式や VBA を使いたくないユーザーは、Excel の組み込みソート機能と補助列を組み合わせることで、簡単に順位付けを実現できます。この方法は、両方のスコア列が数値で構成されており、重み付きまたは連結されたソートロジックを適用したい場合に特に便利です。
以下にその手順を示します。
1.補助列として新しい列(たとえば列 D)を挿入します。
2.補助列の最初の行(例:D2)に、各行を一意に順位付けする数式を入力します。2 つのスコアを連結するか、一方のスコアを他方よりも重視したい場合は、重みを適用します。たとえば、最初のスコアを60%、2 番目のスコアを40%として重み付けする場合は、次のように入力します。
=B2*0.6+C2*0.4 3.Enterキーを押してこの数式を確定し、下方向にコピーしてすべての行に適用します。
4.名前と両方のスコア列を含むすべてのデータを選択します。
5.データタブに移動し、並べ替えを選択します。並べ替えダイアログボックスで、補助列をソートキーとして設定し、最大から最小へで並べ替えるように指定します。
6.これにより、データは結合された順位付けロジックに基づいて自動的に並べ替えられます。
この方法は高度な数式やスクリプトを必要とせず、順位付け基準に異なる重みを適用したい場合にユーザーフレンドリーです。ただし、数値をテキストとして連結する場合(例:スコア90 と88 を「9088」のように結合するなど)、スコアの桁数が異なると正しく動作しない点にご注意ください。一意かつ論理的な順位を確実に生成するには、重み付き合計やスケーリング計算の方が一般的に安全です。
順位付けが必要な場合は、補助列の値に対してさらにRANK 関数を適用できます。たとえば、E2 セルに次のように入力します。
=RANK(D2,$D$2:$D$7) その後、この順位付け数式をすべての行にドラッグして適用してください。
注:補助列で使用している計算方法が、意図した順位付けルールを正確に反映しているか必ず再確認してください。このアプローチは、「総合スコア」に基づくシンプルな順位付けや、データを素早く視覚的に並べ替えたい場合に最適です。
まとめると、Excel で2 つの列に基づいてデータを順位付けするには、動的かつシンプルなケースでは数式を、大規模またはカスタマイズが必要なタスクでは VBA マクロを、単純な重み付き順位付けや連結順位付けには補助列とソート機能を組み合わせる方法が有効です。並べ替え後やスクリプト実行後は必ずサンプルチェックを行い、結果を検証してください。結果が一貫しない場合は、データ内に非表示の結合セル、空白行、または数値がテキスト形式で入力されていないかを確認しましょう。

KUTOOLS AI でExcel の魔法を解き放ちましょう
- スマート実行:セル操作、データ分析、チャート作成をすべてシンプルなコマンドで実現します。
- カスタム数式:ワークフローの効率化に役立つ、あなただけのカスタマイズ数式を生成します。
- VBA コーディング:VBA コードを簡単に記述・実装できます。
- 数式の解釈:複雑な数式が簡単に理解できます。
- テキスト翻訳:スプレッドシート内で言語の壁を乗り越えましょう!
関連記事
最高の Office 業務効率化ツール
| 🤖 | KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブックとシートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的関数(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|さらに多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。
Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします
- Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
- 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
- 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!
すべてのKutools アドインが、たった1 つのインストーラーで完結。
Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
- インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
- 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- 最高のお得感— 個別アドイン購入よりお得