Excel VBA に詳しい方ご指導下さい。 数字とローマ字混在の数文字列の並べ替えです。 その2(今回は1次元です) 数字とローマ字混在の半角4桁の数文字列があります。 (株の銘柄の4桁コードです) 左から1~3桁目は、数字のみで、右から1桁目(1の位)は 数字かローマ字(大文字のみ)になる場合があります。 シートのA1からA20に銘柄の4桁コードがあり、 昇順でソートするとローマ字が混在するものは まとめて後ろにきてしまいます。 欲しい並び替えのように並び替えるには 下記の VBA コードをどのように修正すればいいですか。 詳しい方がいらっしゃいましたらご指導の程よろしくお願い致します。 ■初期データ 7162 4772 7236 5250 6870 8053 278A 4691 3696 2267 5903 255C 6861 456A 6235 3691 8035 5698 7358 255A ■ネット上にあるバブルソートによる並び替え 2267 3691 3696 4691 4772 5250 5698 5903 6235 6861 6870 7162 7236 7358 8035 8053 255A <-- ローマ字があるとまとめて後ろに来る 255C <-- ローマ字があるとまとめて後ろに来る 278A <-- ローマ字があるとまとめて後ろに来る 456A <-- ローマ字があるとまとめて後ろに来る ■欲しい並び替え 2267 255A 255C 278A 3691 3696 456A 4691 4772 5250 5698 5903 6235 6861 6870 7162 7236 7358 8035 8053 ■VBA 前回の質問 2026/5/9 13:40 で 教えていただいたものを自分で変更したのですが 欲しい並び替えのようになりません。 For 文が3つあり、1番目の For 文は、OKで、 2番目の For 文以降がうまくいっていないように見えます。 Sub Sample() Dim i As Integer Dim j As Integer Dim r As Integer Dim tbl() As Variant Dim buf(1) As Variant For r = 1 To 20 ReDim Preserve tbl(1, r - 1) tbl(0, r - 1) = Cells(r, 1).Value tbl(1, r - 1) = Left(Cells(r, 1).Value, 3) Next r 'バブルソート For i = 0 To UBound(tbl, 1) For j = UBound(tbl, 1) To i Step -1 If tbl(1, i) > tbl(1, j) Then buf(0) = tbl(0, i) buf(1) = tbl(1, i) tbl(0, i) = tbl(0, j) tbl(1, i) = tbl(1, j) tbl(0, j) = buf(0) tbl(1, j) = buf(1) End If Next j Next i Cells(1, 3).Resize(UBound(tbl, 1) + 1, 1).Value = WorksheetFunction.Transpose(tbl) End Sub