- ベストアンサー
配列データのソートについて
- 配列データAAA(1000,10)を降順にソートする効率的な方法を教えてください
- 現在はシート上のデータを一時的な配列にコピーしてソートしていますが、効率が悪いです
- 効率的なソート方法を教えてください
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>Sheetsを介さないで、配列データのままでソートする方法が知りたかったのです。 縦30行、横1列の配列ぐらいから理解された方が良いでしょうね 参考に Sub Test() Dim v As Variant Dim i As Long, j As Long Dim tmp As Variant 'A列のデーターで配列の作成 v = Range("A1:A30").Value '降順でソート For i = 1 To UBound(v) For j = UBound(v) To i Step -1 If v(i, 1) < v(j, 1) Then tmp = v(i, 1) v(i, 1) = v(j, 1) v(j, 1) = tmp End If Next j Next i 'B列にソート後のデータ転記 Range("B1").Resize(UBound(v)).Value = v End Sub
その他の回答 (1)
- watabe007
- ベストアンサー率62% (476/760)
参考に >Range(Cells(1, 1), Cells(1000, 10)).Select >Selection.Sort Key1:=Range("E1"), Order1:=xlDescending >For A=1 To 1000 >For B=1 To 10 >BBB(A,B)=Cells(A,B).Value >Next B >Next A >Sheets("ソート後のデータ貼付場").Select >For A=1 To 1000 >For B=1 To 10 >Cells(A,B)=BBB(A,B) >Next B >Next A Dim BBB As Variant With ActiveSheet .Range(.Cells(1, 1), .Cells(1000, 10)).Sort _ Key1:=.Range("E1"), Order1:=xlDescending, Header:=xlNo BBB = .Range(.Cells(1, 1), .Cells(1000, 10)).Value End With Sheets("ソート後のデータ貼付場").Cells(1, 1).Resize(UBound(BBB, 1), UBound(BBB, 2)).Value = BBB
お礼
早速のご回答ありがとうございます。 確かに、スピードアップしました。 実は、配列データをある条件のもとにソートする方法として、 Sheetsを介さないで、配列データのままでソートする方法が知りたかったのです。 質問の主旨を上手く表現出来ず、すいません。
お礼
再びのご回答ありがとうございます。 お礼の入力が遅れて申し訳ありません。 ソートが If v(i, 1) < v(j, 1) Then で出来るなんて夢にも思っていませんでした。 目からウロコの思いです。 また、UBound関数の存在自体も初めてみました。 またまた、v = Range("A1:A30").Value にて配列データを簡単に取得するテクニックには、 恐れ入りました。 本当にありがとうございました。