Excel VBAで数字とローマ字が混在する銘柄コードをソートする場合、標準のSortメソッドでは数字優先の並び順にならず、ローマ字が混在するものが末尾にまとめられてしまうことがあります。この記事では、目的通りに数字を優先してソートするVBAの実装方法を解説します。
問題の背景
標準のSortメソッドを使用すると、Excelは文字列として昇順に並べ替えるため、1234の後に文字を含む218Aなどが後ろにまとめられてしまいます。数字部分を優先した昇順に並べたい場合、数値部分を分離して比較する必要があります。
数字部分を抽出する方法
各銘柄コードの左3桁を数値として取得することで、並べ替えの基準を作ります。VBAでは、Left関数を使い、Val(Left(cell.Value,3))で数値部分を取得できます。
これをキーとして並べ替えることで、数字優先の昇順が可能になります。
補助列を使った簡易ソート
簡単な方法としては、隣の列に数値部分をコピーして、Sortメソッドでその補助列をキーに並べ替える手法があります。
例えば、B列に=VALUE(LEFT(A1,3))の数式を入れ、A列とB列を一緒にSortし、B列をキーに昇順にすると、数字優先の並びになります。
VBAでの実装例
VBAで直接数字部分をキーにして並べ替える場合、以下のようなコードが考えられます。
Sub SortCodes()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("A1:A100"), _
SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:=""
ws.Sort.Header = xlNo
ws.Sort.MatchCase = False
ws.Sort.Apply
End Sub
このコードに補助列で数値部分を抽出する処理を組み合わせると、数字優先でローマ字混在コードも正しく並べ替えできます。
まとめ
数字とローマ字が混在する銘柄コードを数字優先で並べ替えるには、左の数値部分を抽出してキーにするのが有効です。補助列を使う方法やVBAで直接数値部分を参照する方法で、目的通りの並びを実現できます。こうした手法を使うことで、銘柄コードの整理や分析が効率化されます。


コメント