解決済み

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

  • 困ってます
  • 質問No.9556258
  • 閲覧数111
  • ありがとう数1
  • 気になる数1
  • 回答数2
  • コメント数0

お礼率 77% (216/280)

どなたかご存知でしたら回答をよろしくお願いします。
【質問】
下図の様に、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)

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

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

  • 回答No.1

ベストアンサー率 48% (158/328)

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
お礼コメント
moguo4649

お礼率 77% (216/280)

早速の回答頂きありがとうございます。
やってみたところ、うまくできました。
またよろしくお願いします。
投稿日時 - 2018-11-10 06:24:14

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 28% (4446/15802)

Excel(エクセル) カテゴリマスター
#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
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ