- ベストアンサー
枠の左と真ん中と右の数字を分けて昇順に並べる方法
このカテゴリーのエクセルの達人の方々に質問です。 どなたか回答して頂ける方がおみえでしたらよろしくお願いします。 (ちゃんとした回答ではなく、文句やクレーム等を混ぜた記載はご遠慮ください。 私の質問が気に入らない場合は無視して頂ければ結構です。) 【質問】 添付図のとおり、7列×5行の中に数字が1~37まであり、 重複数字を含んでおり、それが4つ(A,B,C,D)あります。 その中で、1列~2列、3列~5列、6列~7列と数字を分けて下段に 「〇中」、「〇左」、「〇右」として左から右へ昇順に並べます。 上記を実現する方法をVBAで実現する方法が知りたいです。 【注意事項】 ・7列×5行の中にある数字の並びは毎回異なります。 ・枠線や塗り潰しの橙色や緑色や青色は、説明のために付けているだけです。 ・VBAで実現する方法~、と書きましたが、 同様のことが他の方法でも実現できればそれを教えて下さい。 ・使用するエクセルは2021です。 以上、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以前のコードを今回に合わせたものです。 Sub Test() Dim mRng As Range Dim i As Long, j As Long, k As Long Dim mR As Long, mC As Long Dim x As Double j = 0: k = 0: mC = 0: mR = 0 Application.ScreenUpdating = False For i = 1 To 4 mC = 0 For Each mRng In Range("C1:E5").Offset(j, k) Range("B14").Offset(mR, mC).Value = mRng.Value mC = mC + 1 Next Range(Cells(14 + mR, 2), Cells(14 + mR, mC + 1)).Sort _ Key1:=Cells(14 + mR, "A"), Order1:=xlAscending, Orientation:=xlSortRows mC = 0 For Each mRng In Range("A1:B5").Offset(j, k) Range("B18").Offset(mR, mC).Value = mRng.Value mC = mC + 1 Next Range(Cells(18 + mR, 2), Cells(18 + mR, mC + 1)).Sort _ Key1:=Cells(18 + mR, "A"), Order1:=xlAscending, Orientation:=xlSortRows mC = 0 For Each mRng In Range("F1:G5").Offset(j, k) Range("B22").Offset(mR, mC).Value = mRng.Value mC = mC + 1 Next Range(Cells(22 + mR, 2), Cells(22 + mR, mC + 1)).Sort _ Key1:=Cells(22 + mR, "A"), Order1:=xlAscending, Orientation:=xlSortRows mR = mR + 1 k = k + 8 If i = 2 Then j = j + 6 k = 0 End If Next Application.ScreenUpdating = True End Sub
その他の回答 (1)
- kon555
- ベストアンサー率51% (1842/3559)
VBA以外の方法です。 Excel365であれば、そのものズバリなソート用関数があります。 https://www.crie.co.jp/chokotech/detail/566/ あとはデータの数が決まっているなら、LARGE関数という『上から数えて◯番目』を抽出する関数でも対応可能です。 https://kokodane.com/kansu_statistics_49.htm
お礼