• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列データのソートについて )

配列データのソートについて

このQ&Aのポイント
  • 配列データAAA(1000,10)を降順にソートする効率的な方法を教えてください
  • 現在はシート上のデータを一時的な配列にコピーしてソートしていますが、効率が悪いです
  • 効率的なソート方法を教えてください

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.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

YON56
質問者

お礼

再びのご回答ありがとうございます。 お礼の入力が遅れて申し訳ありません。 ソートが If v(i, 1) < v(j, 1) Then で出来るなんて夢にも思っていませんでした。 目からウロコの思いです。 また、UBound関数の存在自体も初めてみました。 またまた、v = Range("A1:A30").Value にて配列データを簡単に取得するテクニックには、 恐れ入りました。 本当にありがとうございました。

その他の回答 (1)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

参考に >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

YON56
質問者

お礼

早速のご回答ありがとうございます。 確かに、スピードアップしました。 実は、配列データをある条件のもとにソートする方法として、 Sheetsを介さないで、配列データのままでソートする方法が知りたかったのです。 質問の主旨を上手く表現出来ず、すいません。