- 締切済み
Excelで特定位置のみを降順で並べかえるマクロ
下記のような表がいくつか存在した場合に、 毎回、特定の位置のみを降順で並べかえるマクロを 作成したいと考えております。 ここでいうと、“集計”より下で、“総計”より上の データを降順にしたいと考えております。 ただ、現在“果物”や“出席”となっている名称は表によって異なりま すし、 データの範囲も毎回変わります 大変お手数ですが、どなたかご教示頂けますと幸いです。 --------------------------------------------------------------- 果物 集計 出席 集計 ぶどう 1 しろう 4 みかん 3 たろう 1 メロン 2 はなこ 3 りんご 4 じろう 2 総計 10 ごろう 2 みちこ 1 総計 13 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 果物 集計 出席 集計 りんご 4 しろう 4 みかん 3 はなこ 3 メロン 2 じろう 2 ぶどう 1 ごろう 2 総計 10 たろう 1 みちこ 1 総計 13 --------------------------------------------------------------- ■“果物”部分のみマクロの記録で作成したもの Sub Macro1() Range("A2:B5").Select Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End Sub
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- layy
- ベストアンサー率23% (292/1222)
補足) 「SORTを実行すること」、 これよりもそもそものアルゴリズムのが基本なので、 「SORTを実行すること」のサンプルに着目したものは少ない?。 「ソート アルゴリズム vb」3単語で探すといろいろある。 http://itpro.nikkeibp.co.jp/article/COLUMN/20061024/251654/ SORTを使うのもサンプルはある。高速で処理できる、 中級レベル、とある・・・・・。 http://home.att.ne.jp/zeta/gen/excel/c04p41.htm
- layy
- ベストアンサー率23% (292/1222)
補足になります。 ソート、 ソート(コマンド)を実行するのでなくて、自ら比較しソートは実現できます。 ソートアルゴリズムは、基本中の基本。 小学生でいう「背の低い順に並んでねー」と同じ理屈・・・・。 繰り返しloopが2つ、 if文で大小比較、 1次的に退避するエリア、 簡単にいうとこれだけあればできます。 時間のあるときに、アルゴリズムサンプルをみておくと良いです。 同じ要素があってもできるし、順位付けも応用です。 今回ので言えば、 果物は降順、出席は昇順、でもできる話です。
- tgook
- ベストアンサー率48% (96/198)
No.3です。 追記です。 ソート処理の参考文献を探しましたが以下URLよりやさしく解説しているところが見つかりませんでした。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_sort.html 上記URLの解説と、作ってみたサンプルコードを比較してみてください。
- tgook
- ベストアンサー率48% (96/198)
こんばんわ。 ご質問内容のマクロのサンプルを作成してみました。 以下URLの「Excelで特定位置のみを降順で並べかえるマクロ」がダウンロードリンクになっています。 http://tk27051980.web.fc2.com/tools/VBADownload_02.html ダウンロード後、Book2.xls を開くと、ご質問内容のサンプルデータがシートに入力してあります。 サンプルデータは必要に応じて編集してください。 空セルが無い限り、ソートデータが4行目~32766行までの範囲内であれば対応できます。 列はZ列までが対応範囲です。 ソースコードは確認できるようになっています。 編集される際はコピーを作って、複製したもの編集することをお勧めします。 必要ないかもしれませんが念のため、以下を追記しておきます。 『Book2.xls』を開いた後に出てくる画面で、「マクロを有効にする(E)」をクリック。 SortStart をクリックするとデータがソートされます。 上記のボタンが表示されない時は、以下を試してみてください。 (1)ツール(T) → マクロ(M) → セキュリティ(S) の順にクリック。 (2)セキュリティ レベル をクリック。 (3)高(H) を 中(M) に変更。 (4)OK をクリック。 (5)一旦『Book2.xls』を閉じる。 (6)もう一度『Book2.xls』をダブルクリックで開く。 (7)マクロを有効にする(E) をクリック。
- layy
- ベストアンサー率23% (292/1222)
総計は無くてよいのだから、 総計は一次的でも2行目固定にしたら並べ替えは3行目以降統一となり問題ない 総計は並べ替え前に無く、並べ替え後に生成してもいい項目、果物列一番下、出席列一番下。 決まったルールはできる。 並べ替えして総計をセットする方法を考える。 それでもダメか検討。 VBAに頼るならデバッグできること、誤って削除しても同じ意図のものを自分で打ち込み復活できること、人に作ってもらうものはテストもしていないだろうという気持ちで取り組む。
- imogasi
- ベストアンサー率27% (4737/17069)
VBAのSortメソッドはRangeに対するメソッドである。だからセル範囲Rangeをコード上で指定すればしまい。しかし 初心者は「特定の」を使いたがるが、濫用しすぎ。 その特定の内容が問題なんだ。 データの様子は質問者しか正確にわからない。質問者が疑問の出そうなところを先回りして記述しないとコードは作れない。 できないと言うならプログラムを造るレベルでない。 集計などの在る場所をとどのように探すのかを書いて質問しないと、質問の体をなさない。 人間の目ではわかっているのだろうから、説明しないのだろうが、プログラムを書く立場のものは、それをどういう手がかりで、どうして割り出すかが技術的にも難しいことが多い。 ーー それに列の右端列はデータの尽きる列で良いか 最終行は空白行が現れる前までで良いのか。 列的や行的に考えて、ソート範囲から除外すべきデータがある場合はあるか。(表単位で複数表が「同居。エクセルでは 出来るだけ避けるべきと思うが) ーー 長々とコードを挙げるより、こちらが大切。 補足をすべきだ。