A1= b62 3d 6e b7f
A2 = s6c 2d 6e s7f
とA列内の各セルに、2桁ないし3桁の文字列(左はsかbもしくはブランク、 真ん中は1から7までの整数、右はアルファベットaからfまで)が各4つ~6つ程あります。これを以下の規則に従って、セル内で並び替えることはできますか?マクロだと助かります。
規則は
(1)真ん中の数字が若い順に並び替え
(2)真ん中の数字が同じものが複数ある場合は右のアルファベットが若い順に並び替え
(3)真ん中と右の数字が同じものが複数ある場合はb、ブランク、sの順に並び替え。
つまり
A64= s7b b7b 7b 7c
だったら
A64=b7b 7b s7b 7c
このように並び替えられるようにしたいのですが、可能でしょうか。
No.1ベストアンサー
- 回答日時:
こんばんは!
一例です。
元データはSheet1のA1セル以降にあり、B列に表示するようにしてみました。
Sheet2を作業用のSheetとして使用していますので、
Sheet2はまっさらな状態にしておいてマクロを実行してみてください。
尚、
(1)半角スペースで区切られている文字列は2文字もしくは3文字として、必ず1文字目、または2文字目に数値になっている
(2)3文字の場合1文字目は「b」か「s」のどちらかである
という前提です。
↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。
Sub 並び替え()
Dim i As Long, j As Long, k As Long, cnt As Long, buf As String
Dim wS1 As Worksheet, wS2 As Worksheet, myArray
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
For i = 1 To wS1.Cells(Rows.Count, "A").End(xlUp).Row
If InStr(StrConv(wS1.Cells(i, "A"), vbNarrow), " ") > 0 Then
myArray = Split(StrConv(wS1.Cells(i, "A"), vbNarrow), " ")
For k = 0 To UBound(myArray)
cnt = cnt + 1
wS2.Cells(cnt, "A") = myArray(k)
If Len(myArray(k)) < 3 Then
wS2.Cells(cnt, "A") = "h" & myArray(k) '←空白を「h」に置き換え
End If
For j = 1 To 3
wS2.Cells(cnt, j + 1) = Mid(wS2.Cells(cnt, "A"), j, 1)
Next j
Next k
wS2.Range("A1").CurrentRegion.Sort key1:=wS2.Range("C1"), order1:=xlAscending, Header:=xlNo, _
key2:=wS2.Range("D1"), order1:=xlAscending, Header:=xlNo, _
key3:=wS2.Range("B1"), order1:=xlAscending, Header:=xlNo
For cnt = 1 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
buf = buf & Trim(Replace(wS2.Cells(cnt, "A"), "h", " ")) & " "
Next cnt
wS1.Cells(i, "B") = Left(buf, Len(buf) - 1)
wS2.Range("A:D").Clear
cnt = 0
buf = ""
End If
Next i
End Sub
こんな感じではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelで、行に複数の数字が入力されているセルが複数の列存在し、行を跨いでセル内の数値を並び替える 5 2022/06/17 18:03
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- その他(ソフトウェア) Googleスプレッドシートについて 5 2022/05/07 11:46
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Excel(エクセル) DATEDIFで作成した勤務年数の並べ替えがうまくいかない 3 2023/07/31 17:09
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
- 数学 数学(順列)(訳あり再質問) 男子3人と女子5人が1列に並ぶとき両端うち少なくとも一方は男子である並 1 2023/02/16 10:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
Excelで挿入した図をセルの中央...
-
現在のセルの位置を返す関数は...
-
エクセルでの検索ボックスの作...
-
クリックすると文章が表示され...
-
マクロを実行すると画像がズレ...
-
【EXCEL】先週の月曜日の日付を...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
セルがクリックされた回数をカ...
-
Excelで、図形内の文字をセルに...
-
Excel ハイパーリンクのURLを別...
-
Excel2007 色のカウント (VBA)
-
エクセルマクロ 赤色の文字を検...
-
フォントの色を指定して削除出...
-
アポストロフィーの一括挿入 ...
-
エクセルグラフ数値軸の最大最...
-
セル背景や文字を点滅させる方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
マクロを実行すると画像がズレ...
-
太字に設定されているセルの個...
-
Excelで、図形内の文字をセルに...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
Excel ハイパーリンクのURLを別...
-
エクセルでPDFリンクを大量...
-
エクセル 未入力セルがあると...
-
現在のセルの位置を返す関数は...
-
VBA 見つからなかった時の処理
-
EXCELのセルや文字色の反映
-
【EXCEL】先週の月曜日の日付を...
-
セルの値が変ると自動でマクロ...
-
エクセルでセルをダブルクリッ...
-
アポストロフィーの一括挿入 ...
おすすめ情報