- 締切済み
ExcelVBAで配列をSORT
任意の範囲の内容を読み込んだ2次元配列に入っているデータをワークシートでのSORTのように任意のキー列(第3優先まで)で任意の順(昇降)でSORTするにはどのような命令を実行すればいいか教えてもらえませんか? なお、先頭行はデータ、もちろんキー以外の列のデータも同時に並べ替えをしたいのですが?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ワークシート上で並び替える機能がまさにそのような機能なので、 わざわざ配列でそのようなことを実行する(ための機能を書く)のは、バカげていると思います。 他の人が既に指摘しているようにVBAマクロで、ワークシート上の並び替えに相当する関数(rangeオブジェクト.sort)が利用できます。
- kakusuke
- ベストアンサー率36% (95/259)
rangeオブジェクト.sortメソッドで。
お礼
ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
>2次元配列に入っているデータを たとえばA(1,1)はA1に、A(1,2)はB1に、A(2,1)はA2に・・・、イメージ的に対応している場合と仮定します。そしてキーはA(A,B)のAが一定の配列にある(一定の列にある)とし、キー以外のはそれA以外の配列の要素にあるものと仮定します。 (1)ソートができたとして、エクセルのシートのセルに、最終的にセットするなら、2次元のデータを、一旦シートの行と列の対応セルにセットしてしまって、そのセル範囲RANGEのSORTメソッドを使うほうが、エクセルのソート機能を使えるので、簡単だと思います。このコードはマクロの記録で簡単に手に入ります。 (2)どうしても、配列状態で、まずソートしたいのなら、アルゴリズムを解説した本のソートの章にある、どれかの種類のソートを選んで(バブルソートなど。WEEB照会をすれば相当数出てくるでしょう)、プログラムコードをVBで組むことになります。しかしキーが複数列になったり、昇順と逆順混合などになると、相当アイデアが必要で、プログラムも複雑になります。勉強や趣味でやる以外はやめておいたほうがよいでしょう。これができるレベルの人は、質問などしないで、さっさとWEBや本など、すばやく調べて、プログラムを組んでしまい、質問があるとするともっと、詳細レベルのものを出すような気がします。 >キー以外の列のデータも同時に並べ替えをしたいのですが 配列でソートする場合に、 行に当たる配列全体を、ソートプログラムの中の、キーの大小判別の都度に、移動させる方法もありますが、 キー+当初順序数をつくり、このペアで移動させ、ソート完了後に当初順序数で、当初の配列データを取ってくる方法もあります。
お礼
質問が言葉足らずのために、ご迷惑をおかけしました。 どうもすみませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >SORTのように任意のキー列(第3優先まで)で任意の順(昇降)でSORTするにはどのような命令を実行すればいいか教えてもらえませんか? それは、複数列を配列で並べ替えという意味でしょうか?もし、そうだとしたら、「冗談でしょう?」というほど、無茶に近いですね。私が書くのはせいぜい2次元までで、それ以上の多次元配列のソートのコードを書いたことがありません。テンポラリシートを使って並べ替えたらいかがですか?一応、並べ替えは、バブルソート・アルゴリズムを使えばよいです。
お礼
どうもありがとうございました。
お礼
お騒がせしました。 どうもありがとうございました。
補足
ワークシート上のデータは、行をまたいだ計算結果としてのデータ(算式が書いてある)だったので、シート上でのソートは計算結果が狂ってしまうので、もし、簡単にできるならと思い、投稿しました。そういうコマンドが無いのなら、一旦読み込んだものを別シートにでも書き込んで、シート上でのSORTで対応したいと思います。 どうもありがとうございました。