- 公開日:
エクセルの並び替えでSORT関数以外を使う方法
エクセルのデータを整理する際の便利な機能として、SORT関数を使っての並び替えがあります。
SORT関数を使うとデータを特定の順序で並び替えることが可能ですが、エクセルのバージョンや環境によって使えない場合があります。
この記事では、SORT関数以外でエクセルのデータをスムーズに並び替える方法をご紹介します。
SORT関数でできること
SORT(ソート)関数はExcelでデータの並べ替えができる関数です。
指定した範囲内のデータを昇順または降順に並べ替え、その結果を数式を入力したセルを起点に表示します。
例えば上記の画像は、A2セルからB10セルの点数表の値を点数が高い順にD2セルから並べ替えた例です。
D2セルにSORT関数を入力しています。
ただし、SORT関数はExcel 2021以降もしくはMicrosoft 365でしか使えません。
以下では、SORT関数を使わずにエクセルでSORT関数のような並び替えを行う方法をご紹介します。
エクセルの並び替えでSORT関数以外を使う方法
エクセルの並び替えで、SORT関数以外を使う方法をご紹介します。
関数を使って並べ替える方法
RANK関数とVLOOKUP関数を使って、SORT関数のような並べ替えを行う方法をご紹介します。
まずは上記のような表を準備します。
今回はA2セルからB10セルの点数表を点数が高い順に並べ替えて、E2セルからF10セルに表示します。
まずは列を追加します。後ほどVLOOKUP関数を使うので表の一番左端に列を追加しましょう。
①A列の列番号を右クリックして、②「挿入」を選択します。
新しい列が追加できました。RANK関数を入力して点数を基準に番号をふります。
RANK関数はデータに降順もしくは昇順で順位をつける関数で、書式は「=RANK(数値,参照,[順序])」です。
RANK関数の詳細は以下の記事でご紹介しています。
A2セルに「=RANK(C2,$B$2:$C$10,0)」と入力し、Enterを押します。
RANK関数が入力できました。オートフィルでコピーします。
セルの右下にあるフィルハンドルをドラッグします。
左側の表に点数順の順位をつけられました。
次にE列に1から連番を入力します。
今回はデータが10個あるので「1から10」までを入力しました。
次にVLOOKUP関数を使います。
VLOOKUP関数は指定した条件にあうデータを抽出する関数で、書式は「=VLOOKUP(検索値,範囲,列番号,[検索方法])」です。
VLOOKUP関数の詳細については以下の記事でご紹介しています。
ExcelのVLOOKUP関数の使い方|指定の列と同じ行にある値を返す
F2セルに「=VLOOKUP(E2,$A$2:$C$10,2,FALSE)」と入力して、Enterを押します。
VLOOKUP関数が入力できました。オートフィルでコピーします。
セルの右下にあるフィルハンドルをドラッグします。
点数の方にもVLOOKUP関数を入力します。
G2セルに「=VLOOKUP(E2,$A$2:$C$10,3,FALSE)」と入力して、Enterを押します。
VLOOKUP関数が入力できました。オートフィルでコピーします。
セルの右下にあるフィルハンドルをドラッグします。
すると、左側の表を点数の高い順に並べ替えることができました。
以上の操作で、RANK関数とVLOOKUP関数を使って並べ替えができました。
VBAを使って並べ替える方法
VBAを使って、SORT関数のように並べ替える方法をご紹介します。
VBAの編集には開発タブを使用します。開発タブはデフォルトでは表示されていないため、以下の記事を参考に表示させましょう。
今回は上記の画像の点数表を、VBAを使って点数が高い順に並べ替えます。
①「開発」タブ、②「Visual Basic」の順に選択します。
「Microsoft Visual Basic for Applications」というVBAの編集が表示されます。
①「新しい標準モジュール」、②「標準モジュール」の順に選択します。
標準モジュールに以下のコードをコピーします。
「A1セルからB10セルの表を点数が高い順に並べ替える」という意味のコードです。
具体的には「A1セルからB10セルの表を書式ごとコピーして、点数が高い順に並べ替えて貼り付ける」という操作になっています。
Sub SortAndCopyDataDescending()
Dim ws As Worksheet
Sub CopyAndSortTableByColumnB()
Range("A1:B10").Copy
Range("D1").PasteSpecial Paste:=xlPasteAll
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Dim sortRange As Range
Set sortRange = ws.Range("D2:E10")
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=sortRange.Columns(2), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.SetRange sortRange
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
コピーする表の範囲を変更したい場合は、5行目「Range("A1:B10").Copy」のセル番地を変更します。
貼り付けるセルを変更したい場合は、6行目の「Range("D1").PasteSpecial Paste:=xlPasteAll」のセル番地を変更しましょう。
コードを貼り付けたら、「保存」を選択します。
「名前を付けて保存」ダイアログボックスが表示されます。
①任意の保存場所(例:デスクトップ)を選択します。
②ファイルの種類で「Excel マクロ有効ブック」を選択し、③「保存」ボタンを押します。
マクロを保存できました。
エクセルに戻って、①「開発」タブ、②「マクロ」の順に選択します。
「マクロ」ダイアログボックスが表示されます。
①作成したマクロを選択し、②「実行」ボタンを押します。
以上の操作で、A1セルからB10セルの表を点数順に並び替えることができました。