Excel VBAで数字+ローマ字混在の4桁コードを昇順ソートする方法

Excel

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も数値の間に正しくソートされます。

コメント

タイトルとURLをコピーしました