Pythonを使用してExcelのデータを昇順・降順する方法
2020/07/11
Pythonを使用してExcelのデータの昇順・降順を行う方法について紹介。
Excel内のデータが多くなるとソートに時間がかかったりする。
また、複数のExcelファイルをソートするとなるとさらに時間がかかるため、Pythonで自動化してしまえば、その時間は優雅にティータイムにでもあてておきたい。
Contents
pythonでExcelのデータを昇順・降順
今回は日本の祝日(syukujitsu.xlsx)のデータを使用。
詳しいことは後程説明していきますが、下のコードで実施した場合、ExcelのデータをB列の昇順・A列の降順の順にソートされて保存されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import win32com.client file_path = r"C:\Users\user\Desktop\syukujitsu.xlsx" #Excelファイル操作のための準備 excel = win32com.client.Dispatch("Excel.Application") wb = excel.Workbooks.Open(Filename=file_path) #Sort 数値の割り振り #http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_sort.html xlAscending = 1 xlDescendig = 2 xlYes = 1 #B列で昇順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('B2'), Order1=xlAscending, Header=xlYes) #A列で降順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('A2'), Order1=xlDescendig, Header=xlYes) #Excelファイルを保存 wb.Save() #Excelを閉じる excel.Quit() |
結果は、このようにA列の降順で表示されています。
もう少し詳しく説明していきます。
Excelファイル操作のための準備
まず、Excelのファイルを操作できるように準備していきます。
- Excelの準備&ファイルを開く
- Excelのファイルを保存
- Excelを閉じる
これは、pythonでExcelを操作する際にほとんど使うような機能になります。これにプラスして操作をすることになります。
エクセルのファイルを開いたり、保存する方法については下記リンクを参考にしてください。
Pythonを使用してExcelのファイルを開いたり保存する方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import win32com.client file_path = r"C:\Users\user\Desktop\syukujitsu.xlsx" def excelSort(file_path): #Excelファイル操作のための準備 excel = win32com.client.Dispatch("Excel.Application") wb = excel.Workbooks.Open(Filename=file_path) #Excelファイルを保存 wb.Save() #Excelを閉じる excel.Quit() return excelSort(file_path) |
Sort数値割り振り
プログラム内にありますが、xlAscending(昇順)やxlDescendig(降順)・xlYes(ヘッダー有)などの数値について説明していきます。
これはVBAでも使用される数値になります。
pythonの場合は、変数でxlAscending(昇順)などを使うのですが、これは数値で割り振られています。
下記リンクを確認してもらうと詳細にSortしたいときに使用する数値について記載があります。
1 2 3 4 5 |
#Sort 数値の割り振り #http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_sort.html xlAscending = 1 xlDescendig = 2 xlYes = 1 |
こちらは変数を定義しておかないとpythonでエラーが発生してしまうため、必ず定義しておきましょう。
昇順・降順
最後に昇順・降順について話していきます。
1 2 3 4 |
#B列で昇順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('B2'), Order1=xlAscending, Header=xlYes) #A列で降順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('A2'), Order1=xlDescendig, Header=xlYes) |
まず、ソートしたいデータ範囲の指定。
現在syukujitsuファイルの1番目のsheetの2列(A:B)を指定している。
2列以上ある場合はその範囲を指定。(例:"A:Z")
1 |
wb.Sheets(1).Columns("A:B") |
B列を指定してヘッダー有の昇順でソートを行う。
この際に注意していただきたいのが、先頭行(ヘッダー)にタイトルがあるときは、必ず次の行(下記の場合は'B2')を指定すること。でないとタイトル行もソートされてしまいます。
1 |
.Sort(Key1=wb.Sheets(1).Range('B2'), Order1=xlAscending, Header=xlYes)("A:B") |
複数のファイルのソート方法
同じようなファイルでソートの操作が同じ場合は、下記のプログラムを作成して使用するだけで複数のファイルをソートして保存することができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import win32com.client files_path = [ r"C:\Users\user\Desktop\sample\syukujitsu.xlsx" ,r"C:\Users\user\Desktop\sample\syukujitsu_v2.xlsx" ] def excelSort(file_path): #Excelオブジェクト生成とファイルを開く excel = win32com.client.Dispatch("Excel.Application") wb = excel.Workbooks.Open(Filename=file_path) #Sort Numberの割り振り xlAscending = 1 xlDescendig = 2 xlYes = 1 #B列で昇順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('B2'), Order1=xlAscending, Header=xlYes) #A列で降順 wb.Sheets(1).Columns("A:B").Sort(Key1=wb.Sheets(1).Range('A2'), Order1=xlDescendig, Header=xlYes) #Excelファイルを保存 wb.Save() #Excelを閉じる excel.Quit() return for file_path in files_path: excelSort(file_path) |
上記の方法で、複数の同じようなファイル更新ができます。
まとめ
pythonでExcelの操作を紹介していますが、割とVBAと似ている部分があるなと感じます。特に今回のSortはほとんどVBAでの構文と変わりません。
正直な話、pythonは環境構築にそこそこハードルがあるため、VBAから勉強したほうが割と覚えられるのではないかとか考えています。
VBAの場合は、ある程度参考サイトや参考本も多いためプログラミング入門するのであれば個人的にはVBA(マクロ)から始めるのが割と環境構築とか気にしなくていいから楽だったりする。
まあ、Pythonだといろんなことができるため勉強という意味ではExcelの操作は取っ付きやすいという利点もあったりする。