• 締切済み

Excel VBAで範囲選択後にソートしたい

OS: Windows 2000 ソフトウェア名/バージョン:Excel2000 Excelマクロで以下のような処理をしたいのですが、どのように記述したらよいのでしょうか? マクロの記述例を教えてください。 (1)Excelの複数シート上にデータがA列とB列に以下のように並んでいる。  ※以下の例の場合、3行~6行はグループ01、8行~12行はグループ02、~ (2)グループ行単位の範囲指定を実行し、その中でB列のソートを実行したい。 (3)データ行の行数、グループの数はシートごとにばらばらで決まっていない。 (4)A列のデータ行は上4桁がブランク、グループ行は上2桁がブランクとなっている。 (5)B列には数値しか入っていない。 【行数】 【A列】     【B列】 (01行)  タイトル行1 (02行)  タイトル行2 (03行) △△△△データ01 数値(78979) (04行) △△△△データ02 数値(34533) (05行) △△△△データ03 数値(21423) (06行) △△△△データ04 数値(51343) (07行) △△グループ01 (08行) △△△△データ11 数値(43522) (09行) △△△△データ12 数値(23432) (10行) △△△△データ13 数値(42312) (11行) △△△△データ14 数値(24123) (12行) △△△△データ15 数値(54343) (13行) △△グループ02 (14行) △△△△データ21 数値(64353) (15行) △△△△データ22 数値(42343) ~ ◆上記の例でやりたいこと: 1:データ行の最初の行(03行)から最初のグループ行を探してその1行前(06行)までを範囲指定してB列の数値でソート 2:最初のグループ行の次の行(08行)から次のグループ行を探してその1行前(12行)までを範囲指定してB列の数値でソート 3:2のグループの次の行(14行)から~以下、データの最終行まで処理する。 以上、よろしくお願いします。

みんなの回答

  • freemank
  • ベストアンサー率75% (3/4)
回答No.1

『マクロの記録』を使ってみてはどうでしょう? (1)マクロの記録を開始(適当に名前を設定) (2)B列の先頭設定 (3)「Ctrl」+「↓」で移動 (4)「Ctrl」+「↓」+「Shift」後、 「←」+「Shift」で範囲選択 (5)[データ]-[並べ替え]でソートを実行 (6)「Ctrl」+「↓」でソート完了行の最後へ移動 上記ので作成したマクロをループなりで呼び出し 最終行で終了するようなプログラムで良いのでは?

関連するQ&A

  • エクセルでのソート

    こんにちは いつもお世話になっています エクセルのソートについて教えてください。 以下のようなデータがA列にあります。 Sheet1 Aグループ 愛知県 青森県 秋田県 Bグループ 石川県 茨城県 岩手県 愛媛県 Cグループ 大分県 大阪府 岡山県 沖縄県 香川県 鹿児島県 B列以降にデータがあり、複数グループが複数シートに渡ってあります。 ソート手順は例えば、Aグループ、愛知から秋田を範囲選択しソート、次にB、石川から愛媛を範囲選択しソート、以下同じ、Sheet1が済んだらSheet2へ、という作業手順です。 グループごとの件数は異なるが、ソートする優先キー(列)は第一がB列、第二がC列で同じです。 ソート処理自体はマクロの自動記録でやっていますが、グループごとに範囲選択しマクロを使う手順です。 ここで質問ですが、複数シートに複数グループがあります。各シートの各グループの件数は不一致です。これらのグループをなるべく簡単に上記のような同一基準でソートするにはどうすればいいでしょうか。

  • エクセル2003のVBAの範囲選択について質問です。

    エクセル2003のVBAの範囲選択について質問です。 OSはXPです。 Range("B1:C" & Range("A" & Cells.Rows.Count).End(xlUp).Row).Select この意味は、B1セルからC()の範囲指定をするのに、()をA列の最終行を探すことによって指定する、ということだと思います。いろいろなサイトを参照させてもらいました。 この場合のA列の最終行を探す方法は、A列のデータが歯抜けの場合に正しく探せないので、一旦最終行を探し、そこから上に見に行って最初にデータが入っている行を探している、で正しいと思います。 私が知りたいのは、逆に歯抜けの場合はそこを最終行として指定する方法です。つまり、一旦最終行を探し、上に見に行くのではなく、A列の上から下に見に行って、空白(歯抜け)が見つかったところを最終行と指定する方法です。xlDownを使うのだろう、というところまでは判ったのですが、どうにもその先が判りません。 歯抜けの場合の方がマイナーなのか、この方法を具体例を記載しているサイトを見つけることができませんでした。 よろしくお願いいたします。

  • エクセルのソート

    例えば、以下のような数字があり、これをB列の昇順でソートをかけた場合、B列にある5の数字を含む行が、1番下にくるとはずですが、そうなりません。なぜでしょうか? A列   B列 15200  1 15150  1 15150  1 15100  5 15000  1 セルに空白もありませんし、念のため手打ちで5と打ち直しています。範囲指定も、全部しており、問題ないと思うのですが、そうならないのは、他に何か原因があるのでしょうか?

  • Excel VBA UsedRange範囲ソート

    図のような中抜の一覧ができているとき、商品コードで空行を飛ばして並び替えをしたいのですが、下記だと空行まで(チョコからわたがしまで)しか対象になりません。 ---------------------------- Sub 並べ替え() With ActiveSheet.Sort .SortFields.Clear 'Key:=Range("A3")でソートする列とタイトル位置を指定 .SortFields.Add Key:=Range("A3"), SortOn:=xlSortOnValues, _ Order:=xlAscending '.「商品コード」("A3").でソート .SetRange Range("A3").CurrentRegion ' 先頭行をタイトル行と見なす .Header = xlYes .Apply End With End Sub ------------------------- 範囲をCurrentRegion ではなくUsedRangeに広げるには、どこをいじったらいいでしょうか。 求める結果としては「商品コード」の列が登り順に揃ってほしいのです。 データ処理としてはソートをかければいいだけですが、UsedRange(範囲内のセルを選択し、Ctrl+Shift+Endキーで選ばれる範囲)をみつけてソートをかける方法を知りたいのです。

  • エクセルVBAで指定範囲をしたい

    今、シート上である文字列を検索してそれを別のシートに転記させる簡単なツールを作っています。 そこでシート丸ごと 検索するのは大変なので、行と列を指定範囲するように入力するようにしました。 例: [列]→ A [行]→ 10 入力した列の値を数値に変換したいのですが、どうすればよいのでしょうか? 例えば Aであれば1, Bであれば2・・・ Zであれば25 のようにしたいのです。

  • エクセルVBAで範囲の指定をしたいです(初心者)

    エクセルVBAで範囲の指定をしたいです(初心者) 列AからJがデータが入る範囲です。 列AとBとCには必ず数値等が何かしら入ります。 列Dは常に空白です。 列E以降は何か入ることも入らないこともあります。 7行目までデータがある場合、 A1セルからこの場合はJ7セルまでを範囲指定したいのですが 行数は未定なので、 Range("A1").Select Range(Selection,Selection.End(xlDown)).Select でA列のデータ最終行まで下がり、そこから9つ右の列までを 範囲指定するというのがよくわかりません。 自動記録で絶対参照と相対参照を切り替えてやってみたのですが、 どうしても Range(Selection, Selection.End(xlDown)).Select ActiveCell.Range("A1:J7").Select と常にA1からJ7が指定になってしまいます。 バージョンは2003です。 つたない質問文で申し訳ありませんが、 どなたか宜しくお願いいたします。

  • EXCELのVBAでのsortについて

    EXCELでVBAを使ってsortしているのですが 1行目が項目行にもかかわらずデータとみなされて 並び変えられてしまいます Header:=xlGuess としているのですが・・・ 条件指定していて 同じデータで並び順を変えてsortかけると そちらはきちんと項目行が判断されて 正しく並び変ります とても困っています どうかご指導下さい

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • エクセル:列の範囲選択をうまくできないでしょうか ?

    行数が約2000行ほどの表を毎月使用します。それでいろんな列をコピーして別の表に貼り付けたいのですが、列のコピーをする時に範囲指定でドラッグに結構時間がかかります。これをマクロでやりたいんですが、カーソルをおいた列の一番下の行まで範囲を指定すると言うのをマクロでできないでしょうか? 自動記録でマクロを造ろうとすると、実行した列を選択してしまい、任意の列の選択ができません。 よろしくおねがいします。