• ベストアンサー

エクセルVBAで

いつもお世話になります。 変数A(1),A(2)・・・A(n)で小さい順にB(1),B(2)・・・B(n)と置き換える事は可能でしょうか? セルにAnをいれて、並び替えをしてからBnにいれる方法は分かるんですが。VBA上で可能でしょうか? 宜しくお願いします。

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

  • ベストアンサー
  • hogehage
  • ベストアンサー率50% (54/107)
回答No.1

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

keiri2002
質問者

お礼

回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。 これはこれで使わせて頂きます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

配列にある数を、自分のプログラムで、昇順にソートすることそのものでは無いですか。何も改まった課題ではない。内部ソートです。 それをやる方法は、シスアド試験などにも課題になる有名なものが数個あります。 「ソート アルゴリズム」で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

keiri2002
質問者

お礼

回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.2

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
keiri2002
質問者

お礼

回答ありがとうございます。 実はやりたかったことが、これでは出来ないことが判明しました。 もう一回質問出しますからそちらの方も宜しくお願いします。

関連するQ&A