Excelシート内のデータを並べ替える「SORT」機能。プログラミングどうしてますか?
みなさん、こんにちは。セルネッツ竹本です。
Excel実務で、データを特定の法則で並べ替えるシーンは、多いもの。
今回のテーマは、「SORT」機能です。
が、記述方法には、大きく2種類に分かれます。
◆Excelバージョンによってマクロ記録した記述が違う
掲載の図、(上)Macro1と(下)Macro2では、どちらが読みやすいと感じますか?
(上)並び替えをマクロ記録した結果を貼り付け
(下)旧バージョン記述をさらにシンプル化
(ソース記述のサンプル)
↓'[呼び方] Call M_SORT処理(“O_11”)
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
Sub M_SORT処理(S_St区分 As String)
‘※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
‘Header:=xlYes 見出しは1行データで構成される前提で、
‘DB移行しやすい状態に(セル結合はNG)
‘概念要素は4つ どのシート(O_11)、どの列(A)、並べ順(昇順)
Select Case S_St区分
Case "O_11" '[B列:顧客CD(昇順)] [D列:売上金額(降順)]
O_11.Range("A1").Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("D1"), Order2:=xlDescending, Header:=xlYes
Case "O_51" '[A列:会員CD(昇順)] [C列:受注日(降順)]
O_51.Range("A1").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("C1"), Order2:=xlDescending, Header:=xlYes
End Select
End Sub
◆大事なポイントは、3つ!
1.どの列を並び替えのキーにしているか?
2.昇順か降順か?
3.見出しはあるか、ないか?
サンプルではシンプルにKeyはたった一つしか指定していませんが、記述の違いはあきらかです。
◆可読性(読みやすさ)が何より大事
プログラミングでは、改修といって仕様を変更するシーンがあります。
作った人ならまだしも、第三者が書いたプログラムを読み解くのはけっこうな労力がいるものです
Excelはバージョンが2003から2007へ変わったとき、大きな機能拡張がありました。
利用できる色数もワークシートの行数や列数も進化を遂げました。
SORTをマクロ記録した結果も変わってしまいましたが、こればかりは、旧バージョンがシンプルですので、セルネッツでは、こちらを標準化ガイドラインで使用するよう定めています。
◆メンテナンス性が向上には、Excel標準機能を併用するスキルが大事
システム開発会社で経験を積んだベテランSEとなると、もはやSORTはメモリ上の世界で片付けることも。
せっかく標準機能が実装されているのに、「Quick Sort」など技術で対応するのは、弊社では推奨していません。
理由は、ひとつ。Excelの機能で十分だから。
これは改修の際のコストにも影響するため、低料金サービス提供のリスクとなってしまうのです。
ExcelVBAは他の開発言語に比べ、劣っているところも多分にありますが、Excelブックに対するデータ処理なら、圧倒的に優位性があります。