Excelで数字とローマ字が混在した4桁コードを昇順にソートする場合、単純な数値ソートではローマ字が末尾にまとまってしまいます。ここではVBAを使い、左3桁を数値として、右1桁も含めて自然な昇順に並べ替える方法を解説します。
1. ソートの考え方
左3桁を数値として比較し、右1桁は数値優先、文字は後ろに並ぶようにします。これにより255Aや278Aが正しく数値の間に入り、自然な並びになります。
2. VBAコード例
Sub SortMixedCodes()
Dim tbl() As Variant
Dim i As Long, j As Long
Dim buf As Variant
Dim numLeft As Long
Dim valI As Variant, valJ As Variant
' データ読み込み
tbl = Range("A1:A20").Value
' バブルソート
For i = 1 To UBound(tbl) - 1
For j = i + 1 To UBound(tbl)
' 左3桁を数値に変換
numLeftI = CLng(Left(tbl(i, 1), 3))
numLeftJ = CLng(Left(tbl(j, 1), 3))
' 右1桁を取得
rightI = Right(tbl(i, 1), 1)
rightJ = Right(tbl(j, 1), 1)
' 比較
If numLeftI > numLeftJ Or (numLeftI = numLeftJ And rightI > rightJ) Then
buf = tbl(i, 1)
tbl(i, 1) = tbl(j, 1)
tbl(j, 1) = buf
End If
Next j
Next i
' 結果出力
Range("C1").Resize(UBound(tbl), 1).Value = tbl
End Sub
3. ポイント
- Left関数で左3桁を取得し、CLngで数値に変換
- Right関数で右1桁を取得
- バブルソート内で数値と文字を同時に比較
4. まとめ
数字とローマ字混在の4桁コードは、左3桁を数値として、右1桁を文字コード順に比較することで、希望の昇順に並べ替え可能です。上記VBAを使えば、255Aや278Aも数値の間に正しくソートされます。


コメント