行並べ替え

提供:MeryWiki
2014年2月1日 (土) 13:51時点におけるMasme (トーク | 投稿記録)による版 (折返説明画像にborderオプション付加。「既知の仕様」部の説明を微改訂。)
ナビゲーションに移動 検索に移動

選択範囲の文字列を比較し、行の並べ替えを行うマクロです。

  • 通常選択・行選択・矩形選択に対応しています。
  • Unicode または Shift_JIS風の並べ替えが行えます。
  • 半角/全角、大文字/小文字、ひらがな/カタカナを区別するかを選択できます。

【注意点】

  • 矩形選択時に、折り返し行を含んでいると正しく並べ替えられません。
  • 数値での並べ替えには対応していません。
  • 処理速度が遅い上、処理中はCPUをフルに使用します(作者の環境では、1万行の処理に約1秒かかりました)。
    ステータスバーに処理に要した時間が表示されますので参考にしてください。

SortLineBySelection.png

並べ替え(Unicode) Unicode順での並べ替えを実行します。
並べ替え(Shift_JIS風) Shift_JIS風での並べ替えを実行します。
※Shift_JIS とは一部の並び順が異なるため「風」と付いています。
※Shift_JIS にない文字は、最後尾に並びます(昇順時)。
昇順 or 降順 で並べる 昇順 (A→Z)で並べるか降順 (Z→A)で並べるかを切り替えます。
半角/全角を区別 半角文字と全角文字を区別するかしないかを切り替えます。
区別しない場合、全角英数/記号は半角、半角カナは全角とみなして並べます。
大文字/小文字を区別 アルファベットの大文字と小文字を区別するかしないかを切り替えます。
区別しない場合、大文字は小文字とみなして並べます。
ひらがな/カタカナを区別 ひらがなとカタカナを区別するかしないかを切り替えます。
区別しない場合、ひらがなはカタカナとみなして並べます。

ソースコード

ダウンロード→ 行並べ替え_r4.zip

更新履歴

  • 2013/09/19 (rev.4) ファイル:行並べ替え r4.zip
    • ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に2秒→1秒に短縮)。
    • 並べ替え(Shift_JIS風) 時、Shift_JIS にない文字の扱いが変わりました。
      rev.3 までは、昇順/降順を問わず最後尾に並ぶようになっていましたが、
      rev.4 では、昇順/降順の設定に従うようになっています。
  • 2013/09/19 (rev.3) ファイル:行並べ替え r3.zip
    • 「半角/全角を区別」設定を追加。
    • 選択範囲がない場合にエラーが出る不具合を修正。
      ポップアップメニューで「並べ替えが行えない」ことを注意するようにした。
    • 並べ替え(Unicode) 時でも Shift_JIS 用のデータを処理していたムダを解消し、高速化。
    • 並べ替え(Unicode) 時に、水平タブが空行より先に並ぶ不具合を修正(rev.2 限定で発生)。
  • 2013/08/29 (rev.2) ファイル:行並べ替え r2.zip
    • ks 氏の改善策を参考に、処理を高速化(作者の環境で1万行に30秒→2秒に短縮)。
    • 並べ替え(Unicode) 時に、水平タブが空行より先に並ぶバグがあります(rev.3 で修正)。
  • 2013/08/25 (rev.1) ファイル:行並べ替え.zip
    • 初版公開。

注意点および既知の仕様

矩形選択内に折り返し行がある場合の不具合

矩形選択での並べ替え時、折り返された行が含まれていると、正しく並べ替えることができません(画像参照)。

SortLineBySelection PosView.png

Shift_JIS風の並び順

Microsoft コードページ 932 (参考: Wikipedia) の仕様を基本に、以下の変更を加えています。

  • NEC特殊/IBM拡張記号類 ①~" は、全角記号の次。㍻は㍼の次に並ぶ。
  • ローマ数字の小文字形 ⅰ~ⅹ は、大文字形 Ⅰ~Ⅹ の次に並ぶ。

半角/全角を区別しない並び順

  • 全角英数/記号は半角、半角カナは全角とみなして並べ替えます。
  • どの文字がどの文字とみなされるのかは、ソースコード内の「半角/全角変換表」に配列としてまとめられていますので、気になる方はご確認ください。

大文字/小文字を区別しない並び順

  • 大文字は小文字とみなして並べ替えます。このため、[ ] \ ^ _ は英大文字より前に並ぶようになります。
  • ギリシャ文字やローマ数字など、大/小の区別が存在する文字も区別しなくなります。
  • 小さい っ ぁ ゃ などは「捨て仮名」「小書き文字」と呼び、小文字とは異なる概念の文字なので、区別の対象外です。

開発者メモ

「数値での並べ替え」対応 ⇒予定なし
数値の判定が面倒くさいため対応予定は現状ありません。
空白文字や通貨記号や3桁区切り(,)、負数(-)や小数(.)の判定など、考慮することがいろいろあって力尽きました。
「半角/全角を区別」対応 ⇒予定なし rev.3 で対応
処理速度の改善 ⇒お手上げ ks 氏の助力により改善できました
プラグイン化
インタプリタなマクロより、コンパイルしたプラグインの方が処理が高速だと思われます。しかしながら、自分は JavaScript くらいしか組めないので実現予定はありません。

コメント

スポンサーリンク