目次
概要
Excel では日本語のフリガナ(ふりがな)情報を基に並べ替えを行うことがございますが、データの用途によってはフリガナを無視して文字列そのものを基準にソートしたい場合があります。VBA の SortMethod プロパティ に xlStroke
を指定すると、フリガナを参照しない並び替えが可能です。本記事では、範囲指定による簡易マクロと Sort
オブジェクトを用いた汎用マクロの二通りをご紹介いたします。
前提条件
項目 | 内容 |
---|---|
対応 Excel | Microsoft 365 または 2016 以降 |
マクロ設置先 | 標準モジュール |
データ形式 | 先頭行が見出し行の表 |
1. 範囲を直接指定してソートする例
Sub SortWithoutFurigana_Range()
Dim tgt As Range ' 並べ替え対象
Set tgt = Worksheets("Sheet1").Range("B3:E20") ' 見出し行を含む範囲を指定
' B 列を基準に昇順ソート(フリガナ無視)
tgt.Sort Key1:=tgt.Columns(1), _
Order1:=xlAscending, _
Header:=xlYes, _
SortMethod:=xlStroke
End Sub
ポイント
SortMethod:=xlStroke
を指定することで、フリガナではなく文字列そのものを基準に並び替えます。Header:=xlYes
を指定し、見出し行を維持したままソートを実行しています。
2. Sort オブジェクトを使用した汎用マクロ
Sub SortWithoutFurigana_SortObject()
Dim rng As Range
Set rng = ActiveSheet.Range("B3:E20") ' 見出し行を含む範囲
With ActiveSheet.Sort
.SortFields.Clear
' 例:B 列で昇順ソート
.SortFields.Add Key:=rng.Columns(1), _
SortOn:=xlSortOnValues, _
Order:=xlAscending
.SetRange rng
.Header = xlYes
.Orientation = xlTopToBottom
.MatchCase = False
.SortMethod = xlStroke ' フリガナを無視
.Apply
End With
End Sub
ポイント
SortFields
に複数列を追加すれば、優先順位を付けた複合ソートも可能です。SortMethod
を最後に設定すると、全キーに対してフリガナを無視した並べ替えが適用されます。
応用例
目的 | 実装のヒント |
---|---|
降順で並べ替えたい | Order:=xlDescending を指定します。 |
英数字のみフリガナ無視にしたい | 日本語列と英数字列を分け、フリガナを参照したい列には xlPinYin を設定します。 |
毎回異なる範囲を対象にしたい | Application.InputBox(Type:=8) でユーザーに範囲を選択させると汎用性が高まります。 |
よくある質問
質問 | 回答 |
---|---|
フリガナを参照した並べ替えとの違いは何ですか。 | xlPinYin (既定値)は読み仮名情報を基に並べ替えます。一方 xlStroke はセル表示文字列の画数順を利用し、フリガナを無視します。 |
データがテーブル形式の場合でも使えますか。 | はい。テーブル(ListObject)の範囲を取得して同じ手順でソート可能です。 |
まとめ
SortMethod:=xlStroke
を活用すると、フリガナ情報を無視した並べ替えを VBA で簡単に実装できます。まずはサンプルコードを実行し、意図した順序でデータが並ぶことをご確認ください。複数列ソートや動的範囲指定などを組み合わせることで、より柔軟なデータ整理が実現できます。