- ベストアンサー
エクセルで5×5セルの数字を昇順に並べる方法
- エクセル2010を使用して、5×5セルの中にランダムに入っている数字を昇順に並べる方法を教えてください。
- 質問者は、5×5セルの中に数字が1~99までランダムに重複して入っている状態から、それをA1~E5の順に昇順に並べたいとのことです。
- 回答をお待ちしています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
G列をワークエリアに使います。 ' Option Explicit ' Sub Macro1() ' Dim Cell As Range Dim Row As Integer ' For Each Cell In [A1:E5] Row = Row + 1 Cells(Row, "G") = Cell Next Cell Range("G1:G" & Row).Sort [G1] Row = 0 ' For Each Cell In [A1:E5] Row = Row + 1 Cell = Cells(Row, "G") Next Cell [G:G].ClearContents End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
#1のご回答で、問題ないのですが、少し違ったもので、 (1)エクセルVBAやVBscriptに配列をソートするコマンドがないので残念。(言語Pythonにはあるようだ)。原始的な、バブルソートを使ってみます。 Pythonの場合 https://qiita.com/shizuma/items/40f1fe4702608db40ac3 バブルソート例 https://excel-ubara.com/excelvba5/EXCELVBA228.html #1のご回答では、エクセルのシートの列に1次元的にデータを並べて、RangeのSortメソッドを使っています。 (2)範囲がいろいろな場合がある場合を考えて、実行前に、四角な、セル範囲をユーザーがマウスで指定し、コマンドボタンを押して本プログラムを実行する仕組みにしてみます。 ーー Sheet1にコマンドボタンを1つ貼り付ける。 ボタンのCaptionなど設定する。 デザインモードを終了する。 ーーー Sheet1のエベントを描く画面で、 Private Sub CommandButton1_Click() Dim d(26) '---配列にデータをおさめる For Each cl In Selection d(i) = cl i = i + 1 Next '----確認 'For i = 0 To UBound(d) - 1 'MsgBox d(i) 'Next i '---バブルソート Call BubbleSort1(d) '---シートでソート後確認 For i = 0 To UBound(d) - 1 Cells(i + 20, "A") = d(i) Next i End Sub Sub BubbleSort1(ByRef argAry() As Variant) Dim vSwap As Variant Dim i As Integer Dim j As Integer For i = LBound(argAry) To UBound(argAry) For j = UBound(argAry) To i Step -1 If argAry(i) > argAry(j) Then vSwap = argAry(i) argAry(i) = argAry(j) argAry(j) = vSwap End If Next j Next i End Sub Sheet1のデータ範囲を指定して、コマンドボタンをクリック。 確認 A列20以下に 2 4 5 7 8 8 9 10 10 11 12 12 17 19 20 22 24 26 27 29 30 31 34 80
お礼
早速の回答頂きありがとうございます。 やってみたところ、うまくできました。 またよろしくお願いします。