dポイントプレゼントキャンペーン実施中!

UsedRangeを使ってソートすることは可能ですか?

エクセルですが
学年  組  出席番号
2    A    1
1    B    2
と言うデータがあり、
これにフィルタをかけつつ、A列で昇順に並び替えるVBAを作ってるのですが

Sub さんぷる()
オートフィルタをかける
Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter

UsedRange.Sort Key1:=Cells(1, 1), order1:=xlAscending
End Sub

とすると、
UsedRangeでコンパイルエラーになるのですが
どうすればよろしいでしょうか?

「UsedRangeを使ってソートすること」の質問画像

A 回答 (4件)

こんにちは。



なぜ、UsedRangeを使わなくてはならないのでしょうか?
オートフィルタは、一種のデータテーブルが出来ているのですから、そのテーブルの認識には、私は、UsedRangeは使いません。

エラーになるのは、UsedRangeの親オブジェクトがないからです。

>Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column))
列の間がないのなら、このような使い方はしませんが、あえて書くなら、このようになります。

RangeとCellsは、親オブジェクトの関係がないので、2つは繋がっていません。エラーの可能性を含んでいます。

With ActiveSheet '←親オブジェクト
 .Range("A1", .Cells(1, Columns.Count).End(xlToLeft)).AutoFilter
 .UsedRange.Sort Key1:=Cells(1, 1), Order1:=xlAscending
End With

私なら、このような書き方をします。

Sub Sample1()
 With ActiveSheet
  If .AutoFilterMode = False Then
   .Cells(1, 1).AutoFilter 'データの左端上のセル
  End If
  .AutoFilter.Range.Sort Key1:=.Range("A1"), Order1:=xlAscending, _
  Header:=xlYes
 End With
End Sub
    • good
    • 1
この回答へのお礼

UsedRangeを使えば列や行が増えても
対応できると思ったからです。

UsedRangeがエラーになるのは親オブジェクトがないからと言う理由なのですね。

スマートなコード、ありがとうございます。

お礼日時:2013/02/05 21:55

sub macro1()


range("A:C").autofilter
activesheet.autofilter.range.sort key1:=range("A1"), order1:=xlascending, header:=xlyes
end sub
みたいな。


#参考
>UsedRangeでコンパイルエラーになるのですが

activesheet.usedrange
のように使うモノです。
    • good
    • 0
この回答へのお礼

UsedRange.Sort
ではなく
ActiveSheet.AutoFilter.Range.Sort
とやればよかったのですね。
できました。

お礼日時:2013/02/05 21:55

次のようにしてはどうでしょう。



Sub さんぷる()
Range(Cells(1, 1), Cells(1, Cells(1, Columns.Count).End(xlToLeft).Column)).AutoFilter
UsedRange.Sort Key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes
End Sub
    • good
    • 0
この回答へのお礼

やっぱりUsedRangeがエラーになってしまいます。

お礼日時:2013/02/05 21:55

オートフィルタをかけた状態では


並び替えが出来ないんじゃないかな?
⇒並び替えをしてからフィルタをかけるとかなら
いけるんじゃないか?
    • good
    • 0
この回答へのお礼

並び替えが原因なのですか。

お礼日時:2013/02/05 21:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!