- ベストアンサー
エクセルVBAで
いつもお世話になります。 変数A(1),A(2)・・・A(n)で小さい順にB(1),B(2)・・・B(n)と置き換える事は可能でしょうか? セルにAnをいれて、並び替えをしてからBnにいれる方法は分かるんですが。VBA上で可能でしょうか? 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A(1 to n) の配列の中をソートでしたら 以下の様なコードになると思います。 B(1 to n) は使用しません。 Dim sv_A For ii = 1 To n 'n は変数Aの最大個数 For kk = ii + 1 To n 'n は変数Aの最大個数 If A(ii) > A(kk) Then sv_A = A(ii) A(ii) = A(kk) A(kk) = SV_A End If Next kk Next ii
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
配列にある数を、自分のプログラムで、昇順にソートすることそのものでは無いですか。何も改まった課題ではない。内部ソートです。 それをやる方法は、シスアド試験などにも課題になる有名なものが数個あります。 「ソート アルゴリズム」でWEB照会すれば沢山出てきます。 http://www.fc.u-tokai.ac.jp/~oki/98/argo/algorithms.html そのうちバブルソートが一番易しいので例示します。 http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/bubble-sort.htmlのC言語の例をVBAにしてみます。 public void sort(int[] a){ // 最後の要素を除いて、すべての要素を並べ替えます for(int i=0;i<a.length-1;i++){ // 下から上に順番に比較します for(int j=a.length-1;j>i;j--){ // 上の方が大きいときは互いに入れ替えます if(a[j]<a[j-1]){ int t=a[j]; a[j]=a[j-1]; a[j-1]=t; } } } } をVBAでは Sub sort1() '---データをA1:A20にいれてあるとする。 Dim a(20) For i = 0 To 19 a(i) = Cells(i + 1, "A") Next i '----- n = UBound(a) - 1 MsgBox n For i = 0 To n For j = n To 1 Step -1 If a(j) < a(j - 1) Then w = a(j) a(j) = a(j - 1) a(j - 1) = w End If Next j Next i '------ソート後をB列に For i = 0 To 19 Cells(i + 1, "B") = a(i) Next i End Sub
お礼
回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。
- shkwta
- ベストアンサー率52% (966/1825)
VBAのプロシージャ内で配列の並べ替え(ソート)をしたいということであれば、ソート用のアルゴリズム(いろいろある)を使う必要があります。Microsoftのサイトに解説があります。 http://www.microsoft.com/japan/msdn/library/ja/jpperiod/period98/officeVBA/March/ovbad039803.asp また、「VBA 配列のソート」などで検索すると、各種の技法が見つかります。 シートに置かれたデータの並べ替えをVBAからしたいということであれば、Range.Sortメソッドを使います。使い方は複雑なのでSortメソッドのヘルプを参照してください。
- 参考URL:
- http://www.microsoft.com/japan/msdn/library/ja/jpperiod/period98/officeVBA/March/ovbad039803.asp
お礼
回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。
お礼
回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。 これはこれで使わせて頂きます。