こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

5×5セルの中の数字を左端から右端に昇順に並べる

どなたかご存知でしたら回答をよろしくお願いします。
【質問】
下図の様に、5×5セルの中に数字が1~99迄重複してランダムに入っています。
これを、A1~E5(左端から右端)まで、昇順に並べる方法が知りたいです。

〇例題
  A B C D E 
1 05 08 34 12 22
2 07 10 11 20 29
3 80 10 12 17 31
4 08 19 24 90 27
5 02 30 04 09 26

〇実行後
 A B C D E 
1 02 04 05 07 08
2 08 09 10 10 11
3 12 12 17 19 20
4 22 24 26 27 29
5 30 31 34 80 90

〇注意事項
 ・使用するエクセルは2010です。
 ・セルの数字は表示上、2桁で表しています。(例:1ではなく01)

以上、よろしくお願いします。

投稿日時 - 2018-11-09 23:21:51

QNo.9556258

困ってます

質問者が選んだベストアンサー

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

投稿日時 - 2018-11-10 01:09:11

お礼

早速の回答頂きありがとうございます。
やってみたところ、うまくできました。
またよろしくお願いします。

投稿日時 - 2018-11-10 06:24:14

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#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

投稿日時 - 2018-11-10 15:35:52

あなたにオススメの質問