バブルソート、というやり方です。
本来は、配列変数に入れてソートするのですが、今は、3行目に1行目と同じものを入れて、3行目の値を配列変数に見立てて、ソートしています。
「バブルソート」というのは、泡のように(この問題では)大きい数字が上へ上がってゆくので、そのように呼ばれています。
Sub Test()
Dim c, i, j, m As Long
c = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To c
Cells(3, i).Value = Cells(1, i).Value
Next i
For i = 1 To c - 1
For j = i + 1 To c
If Cells(3, i).Value < Cells(3, j).Value Then
m = Cells(3, i).Value
Cells(3, i).Value = Cells(3, j).Value
Cells(3, j).Value = m
End If
Next j
Next i
End Sub
簡単な説明です。
c = Cells(1, Columns.Count).End(xlToLeft).Column
列の端を取得しています。
For i = 1 To c
Cells(3, i).Value = Cells(1, i).Value
Next i
1行目のデータを3行目にコピーしています。
For i = 1 To c - 1
For j = i + 1 To c
If Cells(3, i).Value < Cells(3, j).Value Then
m = Cells(3, i).Value
Cells(3, i).Value = Cells(3, j).Value
Cells(3, j).Value = m
End If
Next j
Next i
「i」と「j」で大きさを比べて、大きければ、入れ替え、を繰り返しています。
なお、速さでいえば、「クィックソート」の方が、速いですが、私、説明をできないので、今回は、分かりやすい「バブルソート」です。
「VBA」に限らず、プログラミングを勉強されるのでしたら、一応、知っておいて損はないと思いますが、「VBA」しか興味がないのでしたら、他の方の回答の方が、圧倒的に優れているのだろうと思います。