• ベストアンサー

エクセル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/17068)
回答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

  • エクセルVBAでできるでしょうか?

    いつもお世話になります。 数列のAnと同じようなことがVBAで可能なのでしょうか? 例 A="A" n=3 An=5 msgbox A3 'これが5になるようにしたい。が ””になる これだとAnが一つの変数とみなされて、上手くいきません。 要はある値が変化するにごとに変数に入れていきたい(保存のようなもの)変数を1個目はA2個目はBということで結びつければできないこともないのですが、数列のようにAnと表現できればと思い質問させて頂きました。 宜しくお願いします。

  • エクセルVBAで

    いつもお世話になります。   A     B     C 1 ああ    XXX    東京 2 ああ    X     大阪 3 いい    XXXX   愛知 4 うう    XX    福岡 5 いい    X     横浜 6 うう          神戸 7 うう    XXX    札幌 これを並び替えたいんですが、セルAの『ああ』なら10、『いい』なら5、『うう』なら3、又セルBの『X』一つにつき5を足した数値の小さい順に並び替えたいのですが、VBA上で可能でしょうか? 宜しくお願いします。

  • エクセルVBAでシートの並べ替え

    シートAと、Aを参照しているシートBのセットを複数枚複製するVBAです。これはこれでちゃんと作動し、複製されたB(n)はA(n)を正しく参照しています。 For n = 1 To X'(Xは変数です。) Sheets(Array("A", "B")).Copy after:=Sheets(Sheets.Count) Next 質問は、このマクロで生成されたシートの並び替え方法です。現状ではA,B,A(2),B(2)~A(n),B(n)ですが、これをA, A(2)~A(n)、B,B(2)~B(n)というようにそれぞれ順番に並べたいのです。どうすればよいのでしょうか?

  • excel vba

    excel VBA (質問1) B7 セルに,DOC20071201_1231.xlsとはいっているとき下記の動作と同様のことをB7を使って表現するにはどうすればいいか。 Sub bookwo_open() Workbooks.Open Filename:="C:\Documents and Settings\taktta\My Documents\Log zzz\2007 log\2007年報告\2007年12月分\" & "DOC20071201_1231.xls" End Sub (質問2) A1セルに7とはいっているとき、B7セルに入っているファイルをオープンするには、どうすればいいか。 (A1セルにnとはいっているとき、Bnセルに入っているファイルをオープンするには、どうすればいいか。)

  • エクセルVBAでの並び替えについて

    エクセルでデータの並び替えの方法が分からなくて質問します。たとえばBの列の100~999、A100~A999、B100~B999のようなデータが縦に入っているものとします。この中には150-1、150-2のようなデータも混ざってます。これをそのままエクセルで並び替えをしても100~999までは上手にできるのですがその後に150-1とかきてA100~が始まります。例えばこのデータを100~始まり149、150-1,150-2、152,153、154のように上桁から基準に並び替えを行いたいのですがいい方法はありませんか?現在はマクロを使ってVBAでSORTの引数を触ったりしたのですが上手にいきません。基本的にVBAで行っているのでVBAでお願いします。初心者なのでよろしくお願いします。

  • セルの文字式の計算をVBAで行いたい

    A1のセルに "100+5n" という文字式が入っている状態で VBAにてこのセルの文字式計算を行いB1のセルから順に結果を出力したいと思っています。 "n"は1から順に指定された数まで1づつ増えていくようにし B1のセル:105、C1のセル:110、D1のセル:115 ・・・・ と結果がなるようにしたいのですが、VBAでどのように記述すればいいのか悩んでいます。 VBAを使わずにExcelの関数で計算できるのならそれでもよいと思っています。

  • エクセル操作について(VBA)

    こんばんは。いつもお世話になってます。 エクセルの操作ですが、 シート1に A1セル 8:10 B1セル 12:05 C1セル 235(B1-A1の分換算) シート2に A1 7:01 B1 7:02 C1 7:03 D1 7:04 …  … ○1 8:10 … … △1 12:05 と入力されているとして、 ○2から△2まで(236セル)、自動的に色がつくようにしたいのですが、 関数や条件付き書式等で対応できるでしょうか? VBAならなんとかできそうですか? よろしくお願いします。

  • エクセルVBA、テイストボックス&ラベル

    いつもお世話になります。 エクセルのセルをcells(n,1)としてfor文を使うように、VBAのフォームのテイストボックスやラベル(10個ぐらい)に番号をつけてfor文を使いたいのですが、可能でしょうか? またfor文以外に順繰りに変数に代入できるでしょうか? 現状 a1=textbox1 ・・・ a10=textbox10と全部書かなければならないのを何とかしたいのです。 宜しくお願いします。

  • VBAで

    VBAで モジュールAで定義された変数を、モジュールBに引継ぐ事はできますか? モジュールAである値の入っているセルを検索し、その行番号を変数 HitRowNo に入れます。 この変数 HitRowNo をモジュールBでも使いたいんですが、変数(の値?)を引継ぐことは可能ですか? 質問の意味がわかりずらいかもしれませんが、よろしくお願いします。

  • EXCEL2003 重複データに色を付けるVBA

    A列のA2からA21に氏名、B列のB2からB21に住所が入力済です。A列で重複しているデータに色をつけて、さらに並び替えをしたいと思います。色は黄色、並び替えの設定は黄色で色を付けたセルがA2から順に表示するVBAを教えていただけませんでしょうか。またお手数でも列をB列、C列に変更した場合についても教えていただけませんでしょうか。VBAコードの貼り付けはできます。よろしくお願いします。

このQ&Aのポイント
  • 自動車のインターネット保険のおすすめは、イーデザイン損保、三井ダイレクト損保、セゾン自動車火災保険です。
  • SBではネット保険では最安ですが、安さと事故の際の不安感から入ることに迷いがあります。
  • 無難な通販型・ネット自動車保険としては、東京海上日動火災、三井住友海上火災保険、損害保険ジャパンの通販型・ネット自動車保険がおすすめです。
回答を見る