• ベストアンサー

アクティブセルをキーにして並べ替えするマクロ

EXCEL2003で、ボタンを押すと、「アクティブセルがある列」をキーにして、 降順で並べ替えが実行されるようなマクロを組みたいと考えています。 表自体は、「A1:Z1000」 の範囲でデータがあるのですが、 その内、「D2:Y999」 の部分だけが並び替わるようにしたいのです。 したがって、アクティブセルが、「A列~C列とZ列」の範囲内にあるときは無効で、 「D列~Y列」の中にあるときだけ動作するようにしたいです。 どんなふうに記述すればよいか、教えていただけませんでしょうか? どうかよろしくお願いいたします。

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

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

Sub Macro1() Dim KEY As Integer KEY = ActiveCell.Column   (1) If KEY >= 4 And KEY <= 25 Then  (2) Range("D2:Y999").Sort Key1:=Columns(KEY), Order1:=xlAscending, Header:=lGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End If End Sub (1)でアクティブセルの列番号を変数KEYに代入します。 (2)で(1)の変数が4(D列)以上かつ25(Y列)以下の時ソートするようにします。 ソートする範囲はRange("D2:Y999")で指定しています。 Key1:=Columns(KEY) で(1)の変数の列をキーにしてソートするようにしています。

nekoponpon
質問者

お礼

mar00さま、おはようございます! さっそくお答えくださいまして、ほんとうにありがとうございました。 このように書けばいいのですね。とても勉強になります。 夜おそくにわざわざ考えてくださって、ありがとうございました!

その他の回答 (3)

回答No.4

マクロじゃないですが、 1. Z列の前に1列挿入し、非表示にする 2. D列の前に1列挿入し、非表示にする 3. 1000行の上に1行挿入し、非表示にする (4. 1行めはタイトル行として、書式を変える) (5. データ - 並び替え ●タイトル行) (6. 並べ替え範囲内のみ ロックを外し、並べ替えOKの保護をかける) これで準備完了 あとは、E1:Z:999の中で[降順で並び替え]ボタン

nekoponpon
質問者

お礼

CoalTarさま、さっそくお答えくださいまして、ほんとうにありがとうございました! なるほどー! 並び替わる範囲を限定するのに、そういうテもあるのですね。 とても参考になります。 朝早くからわざわざ考えてくださって、どうもありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回のコードは範囲指定が間違っていました。 >Range(Cells(1, 4), Cells(999, 25)).Sort key1:=Cells(2, j), order1:=xlDescending の行を >Range(Cells(2, 4), Cells(999, 25)).Sort key1:=Cells(1, j), order1:=xlDescending に訂正してください。 何度も失礼しました。m(_ _)m

nekoponpon
質問者

お礼

tom04さま、たびたびありがとうございます! わざわざ訂正までしていただいて、ほんとうに感謝です。 そのように記述してみます。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 コマンドボタンが配置してあるとして・・・ Private Sub CommandButton1_Click() Dim j As Long j = Selection.Column If j >= 4 And j <= 25 Then Range(Cells(1, 4), Cells(999, 25)).Sort key1:=Cells(2, j), order1:=xlDescending End If End Sub こんな感じではどうでしょうか?m(_ _)m

nekoponpon
質問者

お礼

tom04さま、おはようございます! さっそくお答えくださいまして、ほんとうにありがとうございます。 意外とシンプルにできるものなのですね。 自分でも使えるように、練習してみます。 夜おそくに、わざわざありがとうございました!

関連するQ&A