いろは順で並べ替える

f:id:accs2014:20170728202942p:plain:right:w400

 ひらがな、カタカナの並べ替えは基本的にアイウエオ順となりますが、どうしてもイロハ順にしたい、それも1文字だけでなく文字列全体にわたってイロハ順を適用して並べ替えたいという場合の対応です。
 例として右のようなテーブルを用います。対象となるのは「名称」列です。


f:id:accs2014:20170728202938p:plain:right:w400

 クエリデザインです。
 次のような列を設け、この列を基準として昇順に設定します。



いろは順: Eval(Replace(Replace(Format(StrConv([名称],24),Replace(String(Len(StrConv([名称],24)),"&"),"&","{&}")),"{","Format(Instr('イロハニホヘトチリヌルヲワカヨタレソツネナラムウイノオクヤマケフコエテアサキユメミシエヒモセスン','"),"}","'),'00;#;#')&") & "''")

 ちょっと長くなりましたが、まずは文字列を半角カナに置き換え、さらにイロハの順番に相当する2桁の数字に置き換えて結合しています。
 これによりひらがなとカタカナの区別はなくなり、濁点や半濁点があってもなくても同じ文字として扱われます(「は」も「ば」も「パ」も同じ)。音引き(ー)、英数、漢字、記号はないものとして判断されます。
 ただし文字列中に中括弧({})がある場合はうまくいきませんので別の記号に置き換えてください。


f:id:accs2014:20170728202934p:plain:right:w400

 データシートビューです。
 当然ですがInstr関数の引数の内容を変えれば任意の順番での並べ替えが可能です。