見出し画像

ソート(並び替え)って重要なんです

ITサポーターTsuchidaの土田です。

昭和の時代はファイルを磁気テープに保存して使っていたので、磁気テープって先頭からの順読みしかできないのです。磁気テープの内容をバッチジョブで処理する際には一時的にディスクを使います。ディスクを使って、いろんな情報を照合するには数多くのマッチングを行います。マッチングを行う前に必ず必要なのがソート(並び替え)でした。個人的にコンピュータ処理やプログラミングはソートというものがベースにあると思っています。

ソートという言葉はプログラマーにとってはなじみ深いのですが、プログラミングをしたことがない人にとってはよくわからない言葉なのかもしれません。カナ名前の小さいもの順にソートすると、50音順に並び替えられます。これは文字コードのカタカナでは「ア」が一番小さくて「ン」が一番大きいので、カナ名称をソートすると結果として50音順に並びます。金額が大きいもの順とか、都道府県順とか日常の中でもソートって意外と使われているのです。

ネットでソートのアルゴリズムを検索してみると、意外と多くのアルゴリズムがあります。バブルソート・クイックソート・マージソート・ヒープソートなどの紹介があって、それぞれのアルゴリズムを理解するのは個人的に面白いのですが、いまだにヒープ構造が理解できなかったりします。ただ情報系の学科や専門学校では、ソートのアルゴリズムって試験問題に出しやすいので、学生たちにとって覚えなきゃいけない課題かもしれませんが、実際私がソートのアルゴリズムを作ってプログラミングしたことはありません。

昭和の時代の汎用機やオフコンでは、既にユーティリティでソートがありましたし、自分でアルゴリズムを考えてまでプログラミングを作る必要はありませんでした。今の時代はDBを検索するときにORDER BYを使えばソートされるのです。

ソートで大事なのは、ソートのアルゴリズムを覚えことでなく、ソートされることでデータが並び替えるということが重要なのです。並び替えられているかどうかで処理が変わるということです。名簿の名前が50音順に並んでいなければ、先頭から順番の名前があるかどうか探すことになります。50音順に並んでいればおおよその位置がわかるので早く見つけることができます。人間ですら辺りがついて早いのだから、プログラミングにおいてソートされて並び替えられているとわかっていれば、早い処理のプログラムを作ることができるのです。

実は私はソートって全件を並び変えるので時間がかかるんじゃないかと若い頃は疑っていた時期があったのですが、汎用コンピュータの頃からソートって何故か早いんです。並び替えが必要な場合はソートの機能を使うべきです。それもわざわざ自分でソートのアルゴリズムを作る必要はなく、プログラム言語に用意されているソートやデータベースの機能を使えばいいのです。

一見このプログラマー向けの上級者向けの記事のようかもしれませんが、ソートってExcelの並び替えの機能でもあります。Excelの講習でもソートの機能の並び替えは必ず教えます。並び替えも1つのキーで済めば、並び替えの対象列で[昇順]・[降順]のボタン一つで並び替えられるので、誰も悩む人はいないのです。

Excelのソートで操作できない人は、2つ以上キーがあると並び替えの操作ができないのです。でも現実には2つ上のキーを使うことってよくあるのです。例えば、郵便番号で並べるにしても、上3桁と下4桁に分かれていたら、2つキーを指定する必要があります。売上げの高い順で、その中で利益の高い順に並べるなんてこともあります。このようにアウトプットによって見たい順番って変わるのです。

Excelを使う場合は、1番重要な項目を優先されるキーとして、その次の項目をレベルを追加しながら設定します。優先せれる項目ほど上になるようにします。アウトプットの資料は並び替えができていないと注意されるので、Excelでアウトプットを作る場合は並び替えの操作はできるようにしましょう。

なお、Excelで並び替えができていると小計というアイコンでレベルごとの合計を作ることができます。明細をみながら明細ごとの合計が見たい場合は、並び替えと小計の機能を使うと割と簡単にできます。

ソートって現場の人も並び替えの考え方がわかっていると、システム側の方も話が早かったりします。逆にわかっていないと話が長引きます。

以前古いラベルシールの印刷プログラムをWindows7終了で廃止に伴い、Windows10とAccess2016で対応することになりました。業務システムのデータをAccess2016に取り込み、Access2016からラベルシール印刷するようにしました。Access2016からそのまま印刷したところ、これでは業務にならないといわれました。どういう順番で印刷すればいいのかと聞いてもわからないといわれるだけです。仕方がないから実際のデータと既存のシールの出力順を調べて、仕入先・納品日・商品番号順で、商品番号が変わるたびにシールをカットするということを突き止めました。

最初からここの順番でシールを出力してほしいと指示されればその通りに作ることができます。現場の人もどういう並び順なのか理解していないと、作り込みに時間がかかるのです。現場の人も並び順を知っているかどうかって意外と大事なんだと思ってしまいました。


この記事が気に入ったらサポートをしてみませんか?